MSSQL排除group by中的主键

时间:2013-06-05 13:50:41

标签: sql-server aggregate-functions

我有一个看起来像的查询:

SELECT col1, col2, col3, col4, COUNT(*) OVER(PARTITION BY PAT07, PAT08, PAT18) AS TotalPerPerson
FROM Table1
GROUP BY col1, col2, col3, col4

它返回一个表格如下:

col1   col2   col3   col4   TotalPerPerson
data1  data2  data3  data4  2
data1  data2  data3  data5  2
data10 data11 data12 data13 3
data10 data11 data12 data14 3
data10 data11 data12 data15 3

问题是此查询在with子句中,我无法将其连接到主查询。我需要在此查询中选择“id”列,以便我可以在内部联接中使用它。如果不将ID添加到组中,我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您需要将其添加到组或聚合。您可以尝试min()或max(),或者您可以使用子查询来选择顶部1.在不知道主键如何与此数据相关的情况下,很难建议最佳答案。

对于子查询,请尝试类似:

 SELECT 
 col1
,col2
,col3
,col4
,COUNT(*) OVER(PARTITION BY PAT07, PAT08, PAT18) AS TotalPerPerson
,(select top 1 id from Table1 where {criteria relating data to id}) as id 
FROM Table1 
GROUP BY 
 col1
,col2
,col3
,col4 

很难建议使用where子句,因为我不确定这与您在问题中提供的数据有何关联