SSMS - 加入引用同一个表的3个select语句

时间:2018-01-22 15:02:17

标签: sql sql-server

我试图加入引用同一个表的3个select语句。

每个选择语句的条件略有不同。

欢迎任何建议。

谢谢。

这些查询有效:

select [Account Name], sum(amount)as Amount from [dbo].[fmdr_1.19] 
where datepart(month,Period)=3
group by [Account Name], datepart(month,Period), [Account Name]


select [Account Name], sum(amount)as Q2 from [dbo].[fmdr_1.19] 
where datepart(month,Period)=6
group by [Account Name]


select [Account Name], sum(amount)as Q3 from [dbo].[fmdr_1.19] 
where datepart(month,Period)=9
group by [Account Name]

我试图将这三个select语句中的每一个都加入到1个表中。当我运行以下代码时,我得到的错误是:

'专栏' T1.Q1'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。'

我想我一定不能远离。我确信有更有效的方法可以达到相同的结果,但我也在努力提高我加入桌子的能力。

谢谢!

Select N0.[Account Name], T1.Q1, T2.Q2, T3.Q3 from [dbo].[fmdr_1.19] N0
join 
    (select [Account Name], sum(amount) as Q1 from [dbo].[fmdr_1.19] 
        where datepart(month,Period)=3
            group by [Account Name]) T1
        on T1.[Account Name] = N0.[Account Name]
join
    (select [Account Name], sum(amount)as Q2 from [dbo].[fmdr_1.19] 
        where datepart(month,Period)=6
            group by [Account Name]) T2
        on T2.[Account Name] = N0.[Account Name]
join
    (select [Account Name], sum(amount)as Q3 from [dbo].[fmdr_1.19] 
        where datepart(month,Period)=9
            group by [Account Name]) T3
        on T3.[Account Name]=N0.[Account Name]
group by N0.[Account Name]

1 个答案:

答案 0 :(得分:0)

这样的事情应该更有效率:

SELECT SUM(t1_q1) AS Q1, SUM(t2_q2) AS Q2, SUM(t3_q3) AS Q3
FROM
(SELECT 
    CASE WHEN datepart(month,Period)=3 THEN amount ELSE 0 END AS t1_q1,
    CASE WHEN datepart(month,Period)=6 THEN amount ELSE 0 END AS t2_q2,
    CASE WHEN datepart(month,Period)=9 THEN amount ELSE 0 END AS t3_q3
FROM [dbo].[fmdr_1.19]
GROUP BY [Account Name]) AS grouped_tbl