learning_new Ответов: 3

Преобразование строк в столбцы


I have a table called clients where I track the email sent to people and it looks this.

Userid     action      date            TRACKING         zip        Subject

cbg10        O        1/2/2020           Amz           30105       $1 Sales journey
cbg10        O        1/2/2020           Amz           30105       $1 Sales journey

cbg10        C        1/2/2020           Amz           30105       $1 Sales journey

cbg10        P        1/2/2020           Amz           30105       $1 Sales journey

cbg10        O        4/18/2020           TG           67548       Summer arrives

cbg10        P        4/18/2020           TG            67548      Summer arrives

cbg10        C        4/18/2020           TG            67548       Summer arrives


Вот как, я надеюсь, будет выглядеть таблица: Как вы можете этот человек открыть электронную почту 2 раза. Вместо 2 строк,как в первой таблице, эта объединяет выполненные действия
Userid     date      O(Open)  C(Click)  P(Purchase)  TRACKING  zip     Subject

cbg10    1/2/2020     2         1        1            Amz     30105    $1 Sales journey
cbg10    4/2/2020     1         1        1            Amz     30105    Summer arrives
&низкотемпературный;

Что я уже пробовал:

Это то, что я пробовал, к сожалению, это дает мне ряд для каждого открытого. Итак, если кто-то откроет электронное письмо 3 раза, оно даст мне 3 строки вместо 1 строки, которая отображается в Столбцах O(open) 3:
select UserId,

max(case when Aciton = 'O' then 1 else 0 end) as [O(Open)],

max(case when Aciton = 'P' then 1 else 0 end) as [P(Paid)],

max(case when Aciton = 'C' then 1 else 0 end) as [C(Cash)],

[Date],

Tracking,

Zip

from myTable

GROUP BY UserId, [Date], [Tracking], [Zip]

3 Ответов

Рейтинг:
2

MadMyche

То, что вы ищете, скорее всего, будет хорошей причиной, чтобы узнать, как использовать PIVOT функциональные возможности в SQL Server.

Рекомендации:
Оператор SQL Server PIVOT четко объяснен практическими примерами[^]

Использование PIVOT и UNPIVOT - SQL Server | Microsoft Docs[^]


Maciej Los

5ed!

MadMyche

Спасибо, и ответили взаимностью

Maciej Los

:)

Рейтинг:
14

Maciej Los

Соответственно предложению Мадмыча в решении № 1...

Попробовать это:

SELECT UserId, [date], [O] AS [O(Open)], [C] AS [C(Click)], [P] AS [P(Purchase)], TRACKING, zip, [Subject]
FROM 
(
    SELECT UserId, [action], TRACKING, zip, [Subject]
    FROM clients
    --WHERE [date] BETWEEN '...' AND '...'
) DT
PIVOT(COUNT([UserId]) FOR [action] IN([O], [C], [P])) PVT


MadMyche

+5

Maciej Los

Спасибо.

Рейтинг:
0

NEGIN_K

выберите идентификатор пользователя,
SUM(case when [action] = 'O' then 1 else 0 end) as [O(Open)],
SUM(case when [action] = 'C' then 1 else 0 end) as [C(Cash)],
SUM(case when [action] = 'P' then 1 else 0 end) as [P(Paid)],
[Дата],
Отслеживание,
Застежка-молния
от клиентов
Группа по идентификатору пользователя, [дата], [отслеживание], [почтовый индекс];