[英]SQL - Show multiple values across different columns
我有以下查詢,該查詢基本上顯示了數周內每個用戶發送的郵件數。
有多種不同的消息類型,我希望每周在一行上以單獨的列的形式顯示這些結果,但似乎無法找到實現這些結果的最佳方法。
所以我想以類似的結尾。
Col1,Col2,Col3,Col4,Col5,Col6
Username,Week,TotalofMessage,TypeA,TypeB,TypeC
目前,我為每個用戶名,周,類型分別獲得一行。因此,對於3種不同的類型,我有3個ROWS。
SELECT
ui.display_name, to_char(msg.received_at,'yyyy IW'),
msg.message_type_id, count(msg.message_id) AS MESSAGES
FROM
message msg
INNER JOIN
user_info ui ON ui.entity_id = msg.from_entity
WHERE
msg.received_at > sysdate -30
AND msg.from_entity = 2
GROUP BY
ui.display_name, to_char(msg.received_at,'yyyy IW'), msg.message_type_id
ORDER BY
to_char(msg.received_at,'yyyy IW') DESC
任何指針都會有所幫助。
謝謝。
您可以對要執行的操作使用條件聚合:
SELECT ui.display_name, to_char(msg.received_at, 'yyyy IW'),
count(msg.message_id) AS MESSAGES,
sum(case when msg.message_type_id = A then 1 else 0 end) as messages_a,
sum(case when msg.message_type_id = B then 1 else 0 end) as messages_b,
sum(case when msg.message_type_id = C then 1 else 0 end) as messages_c
FROM message msg INNER JOIN
user_info ui
ON ui.entity_id = msg.from_entity
WHERE msg.received_at > sysdate -30 AND msg.from_entity = 2
GROUP BY ui.display_name, to_char(msg.received_at,'yyyy IW')
ORDER BY to_char(msg.received_at,'yyyy IW') DESC;
用適當的值填寫A
, B
和C
請注意,我還從刪除了group by
的message_type_id
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.