【问题标题】:T-SQL - Multiple WITH clause and then SUM totalT-SQL - 多个 WITH 子句,然后总和
【发布时间】:2021-04-08 19:18:03
【问题描述】:

我正在使用 T-SQL,旨在使用三个 WITH 子句收集到我的主表查询中。如果我自己运行每个 WITH 查询,我可以获得所需的结果。但是当将它混合到我的主表查询中时,没有结果显示。我认为我的 WITH 子句还可以,但我在主表查询中玩弄过,没有想要的结果。
非常感谢任何帮助。

WITH n1 AS (SELECT m.name AS n1nom, SUM(y.Column1) AS SomeTotal1
FROM Mees m
INNER JOIN Listy y
ON y.m1=m.name
WHERE Yr=2020
GROUP BY m.name)
,
n2 AS (SELECT m.name AS n2nom, SUM(y.Column1) AS SomeTotal2
FROM Mees m
INNER JOIN Listy y
ON y.m2=m.name
WHERE Yr=2020
GROUP BY m.name)
,
n3 AS (SELECT m.name AS n3nom, SUM(y.Column1) AS SomeTotal3
FROM Mees m
INNER JOIN Listy y
ON y.m3=m.name
WHERE Yr=2020
GROUP BY m.name)

SELECT m.name, SUM(n1.sometotal1 + n2.sometotal2 + n3.sometotal3) AS Cool
FROM Mees M
INNER JOIN n1
ON n1.n1nom=m.name
INNER JOIN n2
ON n2.n2nom=m.name
INNER JOIN n3
ON n3.n3nom=m.name
GROUP BY m.name, n1.sometotal1 + n2.sometotal2 + n3.sometotal3;

【问题讨论】:

    标签: sql-server tsql sum with-statement


    【解决方案1】:

    如果当m.namey.m1y.m2y.m3 中的任何一个匹配时,如果您想要y.Column1 的总数,那么您只需要1 个连接和聚合:

    SELECT m.name, SUM(y.Column1) AS Total
    FROM Mees m
    INNER JOIN Listy y
    ON m.name IN (y.m1, y.m2, y.m3)
    WHERE Yr = 2020
    GROUP BY m.name
    

    如果您想多次添加y.Column1,以防y.m1y.m2y.m3 中的一个以上匹配m.name,则在CASE 中使用CASE 表达式SUM()

    SELECT m.name, 
           SUM(
             ( 
               CASE WHEN m.name = y.m1 THEN 1 ELSE 0 END +
               CASE WHEN m.name = y.m2 THEN 1 ELSE 0 END +
               CASE WHEN m.name = y.m3 THEN 1 ELSE 0 END
             ) * y.Column1
           ) AS Total
    FROM Mees m
    INNER JOIN Listy y
    ON m.name IN (y.m1, y.m2, y.m3)
    WHERE Yr = 2020
    GROUP BY m.name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2011-08-18
      • 2012-10-16
      • 2012-10-19
      相关资源
      最近更新 更多