【问题标题】:Nested select with dynamic where具有动态位置的嵌套选择
【发布时间】:2013-08-02 15:02:52
【问题描述】:

我需要显示当前年份和上一年至今的结果。理想情况下,我希望结果看起来像

ID|CYTD|PYTD
# |Sum |Sum

我的查询如下所示。问题是我如何设置与当年的行匹配相同的 id 的位置。

select Table.ID,
 SUM(Table.Column) as CYTD, 

(select SUM(Table.Column) from Table
where Table.Id = ?? and Table.Year between Prev and Current
group by Table.Id) as PYTD

Where Table.Year between Current and Future
group by Table.Id

【问题讨论】:

  • 你能描述一下这张桌子吗?有年份栏吗?该列是什么数据类型?
  • ID int ,金额小数,日期日期时间。它比这更大,查询也更大,所以我尝试简化它以分享它的基本内容。

标签: sql select nested sum


【解决方案1】:

尝试以下方法:

SELECT TT.ID,
    SUM(TT.amount) AS CYTD,
    (SELECT SUM(T.amount)
     FROM YOURTABLE T
     WHERE T.Id = TT.id
        AND T.DATE BETWEEN '2012-01-01' AND '2013-01-01'
     GROUP BY T.Id) AS PYTD
FROM YOURTABLE TT
WHERE TT.DATE BETWEEN '2013-01-01' AND '2014-01-01'
GROUP BY TT.Id

因为yourtable 在查询中多次出现,您必须在每次出现时给它一个别名,然后比较它们的 id,这应该会给出您想要的结果。

编辑:

如果您希望它是动态的,并使用当前年份作为参考,您可以这样做:

SELECT TT.ID,
    SUM(TT.amount) AS CYTD,
    (SELECT SUM(T.amount)
     FROM YOURTABLE T
     WHERE T.Id = TT.id
        AND YEAR(T.DATE) = YEAR(now())
     GROUP BY T.Id) AS PYTD
FROM YOURTABLE TT
WHERE YEAR(TT.DATE) = YEAR(now()) - 1
GROUP BY TT.Id;

查看此fiddle 以了解它的实际效果。

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2013-07-28
    • 1970-01-01
    • 2014-03-31
    • 2012-05-22
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多