繁体   English   中英

用SQL Server组中没有的列选择

[英]Select with column that no in the group by SQL Server

我想选择不在GROUP BY

我的代码:

 SELECT 
     dbo.func(field1, field2), field3
 FROM
     table
 WHERE
     field4 = 1224
 GROUP BY
     dbo.func(field1, field2), field3
 HAVING
     COUNT(id) > 1

我还要选择这样的列id

 SELECT 
     id, dbo.func(field1, field2), field3
 FROM
     table
 WHERE
     field4 = 1224
 GROUP BY
     dbo.func(field1, field2), field3
 HAVING
     COUNT(id) > 1

我怀疑您要应用计数限制,然后返回原始表中的所有匹配记录以及标量函数的输出。 一种方法是使用COUNT作为具有分区的分析函数,该分区对应于原始GROUP BY子句中出现的列。 此处的区别在于,我们实际上并未汇总原始表。

WITH cte AS (
    SELECT id, dbo.func(field1, field2) AS out, field3,
        COUNT(id) OVER (PARTITION BY dbo.func(field1, field2), field3) cnt
    FROM yourTable
    WHERE field4 = 1224
)

SELECT id, out, field3
FROM cte
WHERE cnt > 1;

您可以重新连接到原始表以检索具有ID的匹配行:

SELECT  t.id
,       filter.funresult
,       t.field3
FROM    table t
JOIN    (
        SELECT  dbo.func(field1,field2) as funresult
        ,       field3
        FROM    table
        WHERE   field4 = 1224
        GROUP BY
                dbo.func(field1,field2)
        ,       field3
        HAVING  COUNT(id) > 1
        ) filter
ON      filter.funresult = dbo.func(t.field1, t.field2)
        AND filter.field3 = t.field3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM