Pivot SQL表中的订购月份
我试着做一个以月和年为基础的支点。总的来说,我总是被支点卡住。尝试从1月到12月排序月份,但总是从12月到年列后的1月开始。以下是我迄今为止所做的工作:Pivot SQL表中的订购月份,sql,sql-server,pivot,Sql,Sql Server,Pivot,我试着做一个以月和年为基础的支点。总的来说,我总是被支点卡住。尝试从1月到12月排序月份,但总是从12月到年列后的1月开始。以下是我迄今为止所做的工作: SELECT PvtMonth.TYear, PvtMonth.December, PvtMonth.November, PvtMonth.October, PvtMonth.September, PvtMonth.August, PvtMonth.July,
SELECT PvtMonth.TYear,
PvtMonth.December,
PvtMonth.November,
PvtMonth.October,
PvtMonth.September,
PvtMonth.August,
PvtMonth.July,
PvtMonth.June,
PvtMonth.May,
PvtMonth.April,
PvtMonth.March,
PvtMonth.February,
PvtMonth.January
FROM
(
SELECT DATENAME(YEAR, InvoiceDate) AS TYear,DATENAME(MONTH, InvoiceDate) AS TMonth, TrackingNo
FROM [MSM14].[dbo].[PVH_Global_Dash]
WHERE ReceiverAddress LIKE '%78 Mccullough%'
) AS P1
PIVOT
(
COUNT(TrackingNo)
FOR TMonth IN
(
[January],
[February],
[March],
[April],
[May],
[June],
[July],
[August],
[September],
[October],
[November],
[December]
)) AS PvtMonth
只需使用条件聚合:
SELECT YEAR(InvoiceDate) AS TYear,
SUM(CASE WHEN MONTH(InvoiceDate) = 1 THEN 1 ELSE 0 END) as Jan,
SUM(CASE WHEN MONTH(InvoiceDate) = 2 THEN 1 ELSE 0 END) as Feb,
. . .
FROM [MSM14].[dbo].[PVH_Global_Dash]
WHERE ReceiverAddress LIKE '%78 Mccullough%' AND
TrackingNo IS NOT NULL
GROUP BY YEAR(InvoiceDate);
可能不需要条件TrackingNo不为NULL
,但您的版本正在计算非NULL
值。如果它从不为空,只需删除该条件。“它总是从12月开始到1月”是的,这就是您定义的<代码>选择。。。12月、11月、10月、1月。如果您想要一月一号,请在选择语句中首先列出它。-请添加一个标记,以指定您使用的是mysql
、postgresql
、sqlserver
、oracle
还是db2
——或者其他完全不同的东西。