簡體   English   中英

SQL-在不同的列中顯示多個值

[英]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;

用適當的值填寫ABC 請注意,我還從刪除了group bymessage_type_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM