我有一个表的值;得到每一个日期的计数和作为列的日期值
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服务器 –