gpt4 book ai didi

c# - 我应该在带有日期事务的 PIVOT 中的何处放置 WHERE 子句

转载 作者:行者123 更新时间:2023-11-30 18:25:21 25 4
gpt4 key购买 nike

amount_usd  paytype SendItemDateTime1
5.00 google 2015-04-01
2.00 google 2015-04-01
5.00 transfer 2015-04-01
15.00 google 2015-04-01
5.00 google 2015-04-01
2.00 google 2015-04-02
60.00 google 2015-04-02
60.00 google 2015-04-02
5.00 google 2015-04-03

上面是我的演示数据库,其中包含 amount_usd、paytype 和 SendItemDateTime1 列。当我在下面的查询中使用 pivok 时,结果如下,其中 SendItemDateTime1 不是分组依据...有什么问题?

 select amount_usd, paytype, SendItemDateTime1 from tblMobile_RequestOrderLog
where status = 1 and sendstatus = 1 and enable = 1
and SendItemDateTime1 between '4/1/2015' and '4/30/2015'
order by SendItemDateTime1

下面是上面查询的结果。

SenditemDateTime1   google  mol molpay  molstore    paypal  transfer
2015-04-01 15.00 NULL NULL NULL NULL NULL
2015-04-01 5.00 NULL NULL NULL NULL NULL
2015-04-01 15.00 NULL NULL NULL NULL NULL
2015-04-01 5.00 NULL NULL NULL NULL NULL
2015-04-01 60.00 NULL NULL NULL NULL NULL
2015-04-01 10.00 NULL NULL NULL NULL NULL

下面是我想要的...

SendItemDate    google  mol molpay  molstore    paypal  transfer
2015-04-01 32 0 0 0 0 5
2015-04-02 122 0 0 0 0 0
2015-04-03 5 0 0 0 0 0

抱歉,第一次在这里发帖...

编辑

这对我来说有“Where”子句:

SELECT SendItemDateTime1, COALESCE([google], 0), COALESCE([transfer], 0),
COALESCE([paypal], 0),COALESCE([molpay], 0)
FROM (Select SendItemDateTime1, paytype, amount_usd
from tblMobile_RequestOrderLog
where gameidn = 248 and status = 1 and sendstatus = 1 and enable = 1
and SendItemDateTime1 between '4/1/2015 12:00:00 AM'
and '4/30/2015 11:59:59'
) X
PIVOT
(
SUM(amount_usd)
for [paytype] IN ([google],[transfer],[paypal],[molpay])
) piv;

最佳答案

您可以使用以下查询对第一个表中的数据进行透视 - 您只需要明确列出所有付款类型列。我假设 SUM() 作为要应用的聚合:

SELECT SendItemDateTime1, [google],[transfer],[paypal],[molpay]
FROM MyTable
PIVOT
(
SUM(amount_usd)
for [paytype] IN ([google],[transfer],[paypal],[molpay])
) piv;

SqlFiddle here

编辑,我在哪里过滤

如果过滤谓词可以应用于最终列,则可以在 PIVOT 之后应用 WHERE。否则,如果过滤需要在非透视列中完成,那么您可以使用 CTE 或派生表,就像您所做的那样。这是 CTE 中前置过滤器和后置过滤器 WHERE 的示例:

-- Prefilter of non-pivot columns done in CTE or Derived table
WITH cte AS
(
SELECT [amount_usd], [paytype], [SendItemDateTime1]
FROM MyTable
WHERE [amount_usd] > 2
)
SELECT SendItemDateTime1, COALESCE([google], 0), COALESCE([transfer], 0),
COALESCE([paypal], 0),COALESCE([molpay], 0)
FROM cte
PIVOT
(
SUM(amount_usd)
for [paytype] IN ([google],[transfer],[paypal],[molpay])
) piv
-- Post filter of pivot columns done on the final projection
WHERE SendItemDateTime1 > '2015-01-01';

Updated Fiddle

关于c# - 我应该在带有日期事务的 PIVOT 中的何处放置 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30183225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com