【发布时间】:2014-03-24 16:48:20
【问题描述】:
我正在尝试使用可变条件编写查询。有没有办法在不使用联合的情况下执行以下操作,而是使用另一个表中的日期列表?
SELECT
'2014-03-03' AS SnapshotDate
,T2.Pre_PPI_Cycle
,SUM(ISNULL(T2.Pre_PPI_Balance, 0))AS Pre_Balance
,COUNT(ISNULL(T2.Account_Number, 0)) AS Pre_Volume
,ROW_NUMBER() OVER (PARTITION BY Account_Number
ORDER BY Account_Number, SnapshotDate DESC) AS ROW
FROM #TABLE_1 AS T2
WHERE T2.SnapshotDate <= '2014-03-03'
GROUP BY T2.SnapshotDate, T2.Pre_PPI_Cycle, Account_Number
UNION
SELECT
'2014-03-04' AS SnapshotDate
,T2.Pre_PPI_Cycle
,SUM(ISNULL(T2.Pre_PPI_Balance, 0))AS Pre_Balance
,COUNT(ISNULL(T2.Account_Number, 0)) AS Pre_Volume
,ROW_NUMBER() OVER (PARTITION BY Account_Number
ORDER BY Account_Number, SnapshotDate DESC) AS ROW
FROM #PPI_3 AS T2
WHERE T2.SnapshotDate <= '2014-03-04'
GROUP BY T2.SnapshotDate, T2.Pre_PPI_Cycle, Account_Number
编辑
感谢到目前为止的帮助 - 只是为了澄清 - 这是我现在拥有的代码。
SELECT
T2.Capture_Date
,T1.Pre_PPI_Cycle
,SUM(ISNULL(T1.Pre_PPI_Balance, 0))AS Pre_Balance
,COUNT(ISNULL(T1.Account_Number, 0)) AS Pre_Volume
,ROW_NUMBER() OVER (PARTITION BY T1.Account_Number
ORDER BY T1.Account_Number, T1.SnapshotDate DESC) AS ROW
FROM
#PPI_3 AS T1
INNER JOIN (SELECT CHILD.Capture_Date
FROM #DATES AS CHILD
WHERE CHILD.Capture_Date <= '2014-03-04') T2
ON T2.Capture_Date = T1.SnapshotDate
GROUP BY T2.Capture_Date, T1.SnapshotDate, T1.Pre_PPI_Cycle, T1.Account_Number
我在下面的 cmets 中提到,我希望将日期“2014-03-04”更改为保存在 #DATES 表中的日期列表。例如,如果日期
感谢到目前为止大家的帮助 - 感觉我们正在取得进展!
谢谢,山姆
【问题讨论】:
-
我想要做的是用另一个表中的日期列表替换日期(2014-03-03、2014-03-04 等)。
-
例如,在上面的查询中,第一个查询返回 32 个帐户,日期为
标签: sql sql-server sql-server-2008