我的问题是我有一个Select语句,它有一个动态生成的where子句。它共有5个表格。
我基本上需要表1中每个DISTINCT实例的Count,它属于WHERE的范围。这必须能够在一个陈述中执行。所以,从本质上讲,我不能做全局GROUP BY,因为我需要返回其他4个表数据。
如果我能得到一个具有重复计数的列,那么主键列就是完美的。现在这就是我正在查看的问题:
SELECT *
FROM TBL1 1
INNER JOIN TBL2 2 On 2.FK = 1.FK
INNER JOIN TBL3 3 On 3.PK = 2.PK INNER JOIN TBL4 4 On 4.PK = 3.PK
LEFT OUTER JOIN TBL5 5 ON 4.PK = 5.PK
WHERE 1.Date_Time_In BETWEEN '2010-11-15 12:00:00' AND '2010-11-30 12:00:00'
ORDER BY
4.Column
, 3.Column
, 3.Column2
, 1.Date_Time_In DESC
因此,我不会选择所有列,而是将其过滤到大约5或6但是我需要类似于Total列的内容,这是TBL1的主键的不同计数,它应用了WHERE子句,该子句有可能规模越来越大,越来越小。
我几乎希望有一种方法可以将相同的WHERE子句应用于子选择,因为我意识到它可以工作,但不知道除了创建变量之外的其他方法,只是将它放在我不能的两个地方做任何一个。
答案 0 :(得分:1)
如果您使用的是SQL Server 2005或更高版本,则可以使用AGGREGATE OVER函数之一。
SELECT *
, COUNT(UserID) OVER(PARTITION BY UserID) AS 'Total'
FROM TBL1 1
INNER JOIN TBL2 2 On 2.FK = 1.FK
INNER JOIN TBL3 3 On 3.PK = 2.PK INNER JOIN TBL4 4 On 4.PK = 3.PK
LEFT OUTER JOIN TBL5 5 ON 4.PK = 5.PK
WHERE 1.Date_Time_In BETWEEN '2010-11-15 12:00:00' AND '2010-11-30 12:00:00'
ORDER BY
4.Column, 3.Column, 3.Column2, 1.Date_Time_In DESC
答案 1 :(得分:0)
类似于添加:
inner join (select pk, count(distinct user_id) from tbl1 WHERE Date_Time_In BETWEEN '2010-11-15 12:00:00' AND '2010-11-30 12:00:00') as tbl1too on 1.PK = tbl1too.PK