powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединить запрос с таблицей и поместить данные в одну строку
3 сообщений из 3, страница 1 из 1
Объединить запрос с таблицей и поместить данные в одну строку
    #40011476
rrn_di
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здавствуйте!

Есть две таблицы:

Первая:

payments
row_id _id point_id client_id
57095 111-222-333 4 5

Вторая:

payments_attrib

row_id payment_id _name _value
90120 57095 account 7077017
90122 57095 brand ACT
90121 57095 location MST
90123 57095 payMethod PAA
90124 57095 rtt 021456668


Необходимо, чтобы скрипт выводил данные в одну строку подставляя в название столбца данные из второй таблицы (столбец _name)
т.е. такая структура:

+--------+------------+---------+-------+----------+-----------+-----------+
| row_id | payment_id | account | brand | location | payMethod | rtt |
+--------+------------+---------+-------+----------+-----------+-----------+
| 90120 | 57095 | 7077017 | ACT | MST | PAA | 021456668 |
+--------+------------+---------+-------+----------+-----------+-----------+

Данные из второй таблицы развернул скриптом:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT row_id = (SELECT TOP(1) row_id FROM payments_attrib WHERE payment_id = '57095' ORDER BY row_id)
    , payment_id
    , MAX(CASE WHEN _name = 'account' THEN _value ELSE '' END) [account]
    , MAX(CASE WHEN _name = 'brand' THEN _value ELSE '' END) [brand]
    , MAX(CASE WHEN _name = 'location' THEN _value ELSE '' END) [location]
    , MAX(CASE WHEN _name = 'payMethod' THEN _value ELSE '' END) [payMethod]
    , MAX(CASE WHEN _name = 'rtt' THEN _value ELSE '' END) [rtt]
FROM payments_attrib
WHERE payment_id = '57095'
GROUP BY payment_id;



Как объединить вышеуказанный скрипт со скриптом ниже:

Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @guid as nvarchar(250)
SET @guid= '111-222-333'

Select * From payments_archive
JOIN attr4payments_archive ON(payments.row_id = payments_attrib.payment_id)
WHERE 
_id=@guid 



Чтобы конечный результат был вот такой:

row_id _id point_id client_id account brand location payMethod rtt
57095 111-222-333 4 5 7077017 ACT MST PAA 021456668
...
Рейтинг: 0 / 0
Объединить запрос с таблицей и поместить данные в одну строку
    #40011491
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rrn_di,

pivot же !
...
Рейтинг: 0 / 0
Объединить запрос с таблицей и поместить данные в одну строку
    #40011520
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rrn_di,

не совсем понятно по названиям таблиц, но что мешает запихнуть результаты запроса в подзапрос?
максимально сохранил исходные тексты

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Create table #payments  (
row_id int,
_id varchar(20),
point_id int, 
client_id int
)
insert into #payments  (row_id, _id, point_id, client_id)
values (57095, '111-222-333', 4, 5)

Create table #payments_attrib (
row_id int,
payment_id int,
_name varchar(20), 
_value varchar(20),
)
insert into #payments_attrib  (row_id, payment_id, _name, _value)
values (90120, 57095, 'account', '7077017'),
(90122, 57095, 'brand', 'ACT'),
(90121, 57095, 'location', 'MST'),
(90123, 57095, 'payMethod', 'PAA'),
(90124, 57095, 'rtt', '021456668')


DECLARE @guid as nvarchar(250)
SET @guid= '111-222-333'

Select #t.* From #payments
JOIN (
SELECT row_id = (SELECT TOP(1) row_id FROM #payments_attrib WHERE payment_id = '57095' ORDER BY row_id)
     , payment_id
    , MAX(CASE WHEN _name = 'account' THEN _value ELSE '' END) [account]
    , MAX(CASE WHEN _name = 'brand' THEN _value ELSE '' END) [brand]
    , MAX(CASE WHEN _name = 'location' THEN _value ELSE '' END) [location]
    , MAX(CASE WHEN _name = 'payMethod' THEN _value ELSE '' END) [payMethod]
    , MAX(CASE WHEN _name = 'rtt' THEN _value ELSE '' END) [rtt]
FROM #payments_attrib
WHERE payment_id = '57095'
GROUP BY payment_id
) as #t ON(#payments.row_id = #t.payment_id)
WHERE 
_id=@guid 

drop table #payments_attrib
drop table #payments


...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединить запрос с таблицей и поместить данные в одну строку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]