Sql server 如何在SQLServer中使用CASE组合两个子查询
我有两个子查询Sql server 如何在SQLServer中使用CASE组合两个子查询,sql-server,select,sum,pivot,cout,Sql Server,Select,Sum,Pivot,Cout,我有两个子查询 SELECT SUM(QTY_BOUGHT * PRICE), SUM(QTY_BOUGHT), SUM(QTY_BOUGHT * PRICE) / SUM(QTY_BOUGHT) FROM TABLE_A WHERE DAYS_AGED >= 792 及 问题是我想用简单的case语句将它们组合起来,如下所示: SELECT CASE WHEN DAYS_AGED >= 792
SELECT
SUM(QTY_BOUGHT * PRICE),
SUM(QTY_BOUGHT),
SUM(QTY_BOUGHT * PRICE) / SUM(QTY_BOUGHT)
FROM
TABLE_A
WHERE
DAYS_AGED >= 792
及
问题是我想用简单的case语句将它们组合起来,如下所示:
SELECT
CASE
WHEN DAYS_AGED >= 792
THEN SUM(QTY_BOUGHT * PRICE) / SUM(QTY_BOUGHT)
WHEN DAYS_AGED < 792
THEN SUM(QTY_BOUGHT * PRICE) / SUM(QTY_BOUGHT)
END
FROM
TABLE_A
我得到这个错误:
Msg 8120,16级,状态1,第127行
列“TABLE_A.DAYS_AGED”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中
我可能想补充一点,我可以使用UNION或CTE组合它们,这很有效
SELECT
SUM(QTY_BOUGHT * PRICE),
SUM(QTY_BOUGHT),
SUM(QTY_BOUGHT * PRICE) / SUM(QTY_BOUGHT)
FROM
TABLE_A
WHERE
DAYS_AGED >= 792
UNION
SELECT
SUM(QTY_BOUGHT * PRICE),
SUM(QTY_BOUGHT),
SUM(QTY_BOUGHT * PRICE) / SUM(QTY_BOUGHT)
FROM
TABLE_A
WHERE
DAYS_AGED < 792
是否有方法使用CASE语句来整理这两个子查询,是否有可能这样做您需要将CASE表达式放入聚合函数中:
SELECT
SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT*PRICE END) amount1,
SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT END) qty_bought1,
SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT * PRICE END)
/ SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT END) avg1,
SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT*PRICE END) amount2,
SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT END) qty_bought2,
SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT * PRICE END)
/ SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT END) avg2
FROM TABLE_A
您可以在CTE的CASE语句中使用您的条件,然后在组中使用它,如下所示:
是否有可能使用IF.进行此操作。。否则,我只是好奇如果DAYS_AGED>=792选择SumQuantity_BOUGHTPRICE,SumQuantity_BuughtPrice,SumQuantity_BOUGHTPRICE/SumQuantity_BuughtPrice/SumQuantity_BuughtPrice从表A中购买这些行中的内容,是否可以完成……如果……ELSE是一个逻辑流操作符,@Sree,而不是一个函数。不能在SELECT语句中使用它。可以使用IIF而不是CASE。。。但在幕后,这仍然是一个案例表达。
SELECT
SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT*PRICE END) amount1,
SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT END) qty_bought1,
SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT * PRICE END)
/ SUM(CASE WHEN DAYS_AGED >= 792 THEN QTY_BOUGHT END) avg1,
SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT*PRICE END) amount2,
SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT END) qty_bought2,
SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT * PRICE END)
/ SUM(CASE WHEN DAYS_AGED < 792 THEN QTY_BOUGHT END) avg2
FROM TABLE_A
WITH CTE AS
(
SELECT CASE WHEN DAYS_AGED >= 792 THEN 1 ELSE 0 END AS DAYS_AGED_GREATER_OR_EQUAL_792,
QTY_BOUGHT, PRICE
FROM TABLE_A
)
SELECT DAYS_AGED_GREATER_OR_EQUAL_792, SUM(QTY_BOUGHT * PRICE), SUM(QTY_BOUGHT),
SUM(QTY_BOUGHT * PRICE) / SUM(QTY_BOUGHT)
FROM CTE
GROUP BY DAYS_AGED_GREATER_OR_EQUAL_792;