我有一個表的值;得到每一個日期的計數和作爲列的日期值
CUSTOMER_ID CUST_TYPE REG_DATE
1706021001 GENERAL 2017-06-02
1706021002 GENERAL 2017-06-02
1707091001 GENERAL 2017-07-09
1707091002 GENERAL 2017-07-09
1707111001 STAFF 2017-07-11
1707111002 STUDENT 2017-07-14
1706021003 GENERAL 2017-07-14
我已經寫了查詢獲取CUST_TYPE的計數,但是如何顯示REG_DATE值作爲列。
SELECT [REG_DATE]
,[CUST_TYPE]
,COUNT(CUST_TYPE) [COUNT]
FROM [dbo].[tbl_new_customer_registration]
WHERE a.REG_DATE >= CONVERT(DATETIME, CONVERT(VARCHAR(10), '2017-06-02', 112))
AND a.REG_DATE <= CONVERT(DATETIME, CONVERT(VARCHAR(10), '2017-07-11', 112))
GROUP BY CUST_TYPE,REG_DATE;
我想要在每個REG_DATE獲得CUST_TYPE的計數,但REG_DATE的值應顯示爲列。 要求的輸出是;
CUST_TYPE 2017-06-02 2017-07-09 2017-07-11 2017-07-14
GENERAL 2 2 1
STAFF 1
STUDENT 1
我怎樣才能得到這個輸出?請幫忙。
夥計們我使用所提供的解決方案的幫助獲得瞭解決方案,但是我遇到了一個問題。日期列的順序不是固定順序,我想按升序顯示日期列。我嘗試使用ORDER BY子句,但我嘗試的每個解決方案都顯示錯誤。 如何按日期列的升序來訂購我的結果迴轉表?
DECLARE @query AS NVARCHAR(MAX)
DECLARE @columns AS NVARCHAR(MAX)
DECLARE @p_from_dt DATE = CONVERT(DATETIME, CONVERT(VARCHAR(10), '2017-06-02', 112));
DECLARE @p_to_dt DATE = CONVERT(DATETIME, CONVERT(VARCHAR(10), '2017-07-14', 112));
SELECT @columns = ISNULL(@columns + ',', '') + QUOTENAME(status_date)
FROM (
SELECT DISTINCT convert(VARCHAR(10), REG_DATE, 120) [status_date]
FROM [dbo].[tbl_new_customer_registration] a
WHERE a.REG_DATE >= @p_from_dt
AND a.REG_DATE <= @p_to_dt
) AS TheDays
SET @query = N' select * from
(SELECT a.REG_DATE [REG_DATE]
,a.CUST_TYPE [CUST_TYPE]
FROM [dbo].[tbl_new_customer_registration] a
GROUP BY a.REG_DATE,a.CUST_TYPE
) a
pivot(COUNT(CUST_TYPE) FOR [REG_DATE] IN (' + @columns + ')) p
'
--print @columns
EXEC SP_EXECUTESQL @query
GO
谷歌:動態透視在SQL服務器 –