Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Список уникальных записей в каждой колонке / 6 сообщений из 6, страница 1 из 1
19.08.2018, 19:51
    #39690060
Hamber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список уникальных записей в каждой колонке
Исходные данные.

Есть таблица @a - здесь находятся идентификаторы людей
Есть таблица @b - здесь у каждого человека, есть какое-то количество счетов, разделенных по типу.

Задача.
Вывести в плоском виде список неповторяющихся уникальных счетов для каждого типа счета.

К примеру у клиента 1 есть:
счет 1 (тип 1)
счет 2 (тип 1)
счет 3 (тип 2)

В результате хотим получить:
IdСчет1Счет211212NULL

Если будет клиент 2 со счетами:
счет 3 (тип 2)

В результате хотим получить:
IdСчет1Счет22NULL


Код: sql
1.
SELECT @@VERSION


Код: plaintext
Microsoft SQL Server 2017

Пример исходных данных:
Код: 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.
DECLARE @b TABLE (id INT, typ INT,account INT);

INSERT INTO @b
VALUES
(1, 1, 1),
(1, 1, 2),
(1, 2, 1),
(1, 2, 2),

(2, 1, 1),
(2, 1, 2),
(2, 2, 1),

(3, 2, 1),
(3, 2, 2),
(3, 1, 1),

(4,1,1),
(5,2,1),

(6,1,1),
(6,1,2),
(6,1,3),
(6,1,4),
(6,2,1);



Требуемый результат:
idB1accountB2account1111222 1122NULL3113NULL241NULL 5NULL161162NULL 63NULL64NULL
...
Рейтинг: 0 / 0
19.08.2018, 20:21
    #39690072
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список уникальных записей в каждой колонке
Код: sql
1.
2.
3.
4.
5.
6.
7.
select
 coalesce(a.id, b.id), a.account, b.account
from
 (select id, account from @b where typ = 1) a full join
 (select id, account from @b where typ = 2) b on b.id = a.id and b.account = a.account
order by
 coalesce(a.id, b.id);
...
Рейтинг: 0 / 0
19.08.2018, 20:43
    #39690082
Hamber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список уникальных записей в каждой колонке
invm, Наверное некорректный пример привел, полагая что счета у разных людей одинаковы.

Вот на таком примере исходных данных:

Код: 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.
DECLARE @a TABLE(id INT);

INSERT INTO @a VALUES (1),(2),(3),(4),(5),(6);

DECLARE @b TABLE
(
    id INT,
    typ INT,
    account INT
);

INSERT INTO @b
VALUES
(1, 1, 1),
(1, 1, 2),
(1, 2, 3),
(1, 2, 4),
(2, 1, 5),
(2, 1, 6),
(2, 2, 7),
(3, 2, 8),
(3, 2, 9),
(3, 1, 10),
(4, 1, 11),
(5, 2, 12),
(6, 1, 13),
(6, 1, 14),
(6, 1, 15),
(6, 1, 16),
(6, 2, 17);
...
Рейтинг: 0 / 0
19.08.2018, 21:10
    #39690092
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список уникальных записей в каждой колонке
Код: sql
1.
2.
3.
4.
5.
6.
7.
select
 coalesce(a.id, b.id), a.account, b.account
from
 (select distinct id, account, row_number() over (partition by id order by account) as rn from @b where typ = 1) a full join
 (select distinct id, account, row_number() over (partition by id order by account) as rn from @b where typ = 2) b on b.id = a.id and b.rn = a.rn
order by
 coalesce(a.id, b.id), coalesce(a.rn, b.rn);

?
...
Рейтинг: 0 / 0
19.08.2018, 21:20
    #39690095
Hamber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список уникальных записей в каждой колонке
invm, тьфу ты :) Как все легко оказалось. Спасибо огромное)

А я уже начал мудрить через GROUPING SETS / DENSE_RANK.
...
Рейтинг: 0 / 0
19.08.2018, 21:38
    #39690098
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список уникальных записей в каждой колонке
Поправка
Код: sql
1.
2.
3.
4.
5.
6.
7.
select
 coalesce(a.id, b.id), a.account, b.account
from
 (select id, account, row_number() over (partition by id order by account) as rn from @b where typ = 1 group by id, account) a full join
 (select id, account, row_number() over (partition by id order by account) as rn from @b where typ = 2 group by id, account) b on b.id = a.id and b.rn = a.rn
order by
 coalesce(a.id, b.id), coalesce(a.rn, b.rn);
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Список уникальных записей в каждой колонке / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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