Sql ],9月,[10月], [11月],[12月]) )p 订购人 案例日期名称(月,getdate()) “一月”是什么时候,然后是一月 什么时候是二月,然后是二月 “三月”是什么时候 “四月”是什么时候,然后是四月 “五月”是什么时候 “六月”是什么时候
],9月,[10月], [11月],[12月]) )p 订购人 案例日期名称(月,getdate()) “一月”是什么时候,然后是一月 什么时候是二月,然后是二月 “三月”是什么时候 “四月”是什么时候,然后是四月 “五月”是什么时候 “六月”是什么时候 “七月”是什么时候 “八月”是什么时候 什么时候是九月,然后是九月 “十月”是什么时候,然后是十月 “十一月”是什么时候,然后是十一月 “十二月”是什么时候,然后是十二月 结束描述Sql ],9月,[10月], [11月],[12月]) )p 订购人 案例日期名称(月,getdate()) “一月”是什么时候,然后是一月 什么时候是二月,然后是二月 “三月”是什么时候 “四月”是什么时候,然后是四月 “五月”是什么时候 “六月”是什么时候 ,sql,sql-server-2008,Sql,Sql Server 2008,],9月,[10月], [11月],[12月]) )p 订购人 案例日期名称(月,getdate()) “一月”是什么时候,然后是一月 什么时候是二月,然后是二月 “三月”是什么时候 “四月”是什么时候,然后是四月 “五月”是什么时候 “六月”是什么时候 “七月”是什么时候 “八月”是什么时候 什么时候是九月,然后是九月 “十月”是什么时候,然后是十月 “十一月”是什么时候,然后是十一月 “十二月”是什么时候,然后是十二月 结束描述 您想点什么?您正在尝试更改列的位置吗?(因此,在3月份,列以3
您想点什么?您正在尝试更改列的位置吗?(因此,在3月份,列以3月份开始,以2月份结束?)或者您正在尝试对数据进行排序,以便在3月份,数据按3月份列中的值排序?还是你在努力实现其他目标?也许你们想要的输出的一个例子会有所帮助?大家好,很抱歉回复晚了,我被召集到一个会议上。感谢您的所有回复,我一定会查看数据透视表路线并向您报告。事实上,有人发布了一个答案,它使用我的查询工作,但它不再在这里??。我会看看下面的数据透视表,看起来干净多了。我会回来报告,并勾选正确答案@dems我试图对数据而不是列进行排序。
DATENAME(month,getdate())
是一个常量。此函数的每一行数据都有相同的结果。这意味着它根本不会改变数据的顺序。。。除非我遗漏了什么?他们正试图根据GetDate()
的结果将列更改为orderby
,因此如果今天执行,您将orderby
八月列,但如果您在九月执行,它将orderby
该列。这似乎是他们试图做的,除非我遗漏了什么-这就是当前的orderby
正在做的事情。你测试过这个吗?根据我的经验,此语句将根据执行时间按不同字段排序<例如,代码>按日期名称排序(月份,myField),不会按不同的列排序。今天运行它时,它只需按'August'排序。而不是按表格排序。August,与按'this is a string'排序没有什么不同。。@Dems您是对的,现在太早了。修正了,谢谢你指出这一点。
SELECT txt_web_name,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 1 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'January',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 2 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'February',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 3 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'March',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 4 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'April',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 5 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'May',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 6 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'June',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 7 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'July',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 8 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'August',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 9 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'September',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 10 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'October',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 11 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'November',
SUM(CASE WHEN MONTH(dte_pay_paydate) = 12 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS 'December'
FROM tbl_payment
INNER JOIN dbo.tbl_orders ON (uid_pay_orderid = uid_orders)
INNER JOIN dbo.tbl_websites ON (uid_order_webid = uid_websites)
WHERE dbo.tbl_payment.bit_pay_paid = 1
GROUP BY txt_web_name
ORDER BY
CASE
WHEN MONTH(GETDATE()) = 1 THEN 'January'
WHEN MONTH(GETDATE()) = 2 THEN 'February'
WHEN MONTH(GETDATE()) = 3 THEN 'March'
WHEN MONTH(GETDATE()) = 4 THEN 'April'
WHEN MONTH(GETDATE()) = 5 THEN 'May'
WHEN MONTH(GETDATE()) = 6 THEN 'June'
WHEN MONTH(GETDATE()) = 7 THEN 'July'
WHEN MONTH(GETDATE()) = 8 THEN 'August'
WHEN MONTH(GETDATE()) = 9 THEN 'September'
WHEN MONTH(GETDATE()) = 10 THEN 'October'
WHEN MONTH(GETDATE()) = 11 THEN 'November'
WHEN MONTH(GETDATE()) = 12 THEN 'December'
END DESC
ORDER BY
CASE MONTH(GETDATE())
WHEN 1 THEN January
WHEN 2 THEN February
...
END
select *
from
(
select txt_web_name, mon_pay_amount, datename(month,dte_pay_paydate) as mpd
FROM tbl_payment
INNER JOIN dbo.tbl_orders ON (uid_pay_orderid = uid_orders)
INNER JOIN dbo.tbl_websites ON (uid_order_webid = uid_websites)
WHERE dbo.tbl_payment.bit_pay_paid = 1
AND txt_pay_type<>'credit'
) t
pivot
(
sum(mon_pay_amount) for mpd in
([January],[February],[March],[April],[May],[June],[July],[August], .....)
)p
order by
case MONTH(getdate())
when 1 then [January]
when 2 then [February]
...
end
SELECT txt_web_name,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 1 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS January,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 2 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS February,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 3 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS March,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 4 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS April,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 5 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS May,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 6 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS June,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 7 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS July,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 8 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS August,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 9 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS September,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 10 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS October,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 11 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS November,
SUM(CASE WHEN MONTH(dte_pay_paydate) = 12 AND txt_pay_type <> 'Credit' THEN mon_pay_amount ELSE 0 END) AS December
FROM tbl_payment
INNER JOIN dbo.tbl_orders ON (uid_pay_orderid = uid_orders)
INNER JOIN dbo.tbl_websites ON (uid_order_webid = uid_websites)
WHERE dbo.tbl_payment.bit_pay_paid = 1
GROUP BY txt_web_name
ORDER BY
CASE MONTH(GETDATE())
WHEN 1 THEN January
WHEN 2 THEN February
WHEN 3 THEN March
WHEN 4 THEN April
WHEN 5 THEN May
WHEN 6 THEN June
WHEN 7 THEN July
WHEN 8 THEN August
WHEN 9 THEN September
WHEN 10 THEN October
WHEN 11 THEN November
WHEN 12 THEN December
END DESC
SELECT *
FROM
(
SELECT txt_web_name,
txt_pay_type,
DATENAME(month, dte_pay_paydate) mth, -- get the month name instead of the number
mon_pay_amount
FROM tbl_payment
INNER JOIN dbo.tbl_orders
ON (uid_pay_orderid = uid_orders)
INNER JOIN dbo.tbl_websites
ON (uid_order_webid = uid_websites)
WHERE dbo.tbl_payment.bit_pay_paid = 1
and txt_pay_type <> 'Credit'
) x
PIVOT
(
sum(mon_pay_amount)
for mth in([January], [February], [March], [April], [May],
[June], [July], [August], September, [October],
[November], [December])
)p
order by
case datename(month, getdate())
when 'January' then January
when 'February' then February
when 'March' then March
when 'April' then April
when 'May' then May
when 'June' then June
when 'July' then July
when 'August' then August
when 'September' then September
when 'October' then October
when 'November' then November
when 'December' then December
END Desc