假设有一个SQL表:testTable,其列为:clientID,colA,colB,colC。
reference clientID colA colB colC
---------------------------------------------
001 1 test1 test2 test3
002 1 test1 ball2 test3
003 2 test1 ball2 test3
004 2 test1 ball2 test3
005 3 test1 test2 test3
006 4 test1 test2 test3
007 4 test1 test2 test3
009 5 test1 ball2 test3
---------------------------------------------
我想选择colB类似'test'的所有不同行,并按clientID分组。所以我最终得到:
reference clientID colA colB colC
----------------------------------------------
001 1 test1 test2 test3
005 3 test1 test2 test3
006 4 test1 test2 test3
----------------------------------------------
编辑: 参考栏是唯一的 如果我使用 选择distinct * .. from ..其中colB像'%test%'group by clientID 然后返回的结果没有clientID分组
答案 0 :(得分:4)
当您按一列分组时,您将多行转换为一行,而select中的其他列必须是聚合函数或子查询。使用哪种功能取决于您的需要。如果与字符串列
一起使用,使用下面示例中的MIN()将按字母顺序给出第一个结果SELECT clientID
, MIN(colA) AS colA
, MIN(colB) AS colB
, MIN(colC) AS colC
FROM tableA
WHERE colB LIKE '%test%'
GROUP BY clientID
编辑: 这是另一个解决方案,不是使用GROUP BY,而是使用ROW_NUMBER()
的公用表表达式WITH CTE_Source AS
(
SELECT *
FROM TableA
WHERE colB LIKE '%test%'
)
, CTE_Filter AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY reference) RN
FROM CTE_Source
)
SELECT *
FROM CTE_Filter
WHERE RN = 1
答案 1 :(得分:1)
只是一个不同的是不够的?
Select distinct * from #data where ColB like 'test%'
如果您只需要在不同的
上考虑某些列,则可以使用带有关系的前1名Select top (1) with ties * from #groupby where ColB like 'test%'
order by row_number() over(partition by clientid order by cola,colb,colc)--you can include your required columns only
答案 2 :(得分:0)
where子句在having和group by之前。如果要在分组之前过滤掉记录,条件在where子句中进行,如果要过滤掉分组记录,则条件包含在having子句中:
select ...
from ...
where ...
group by ...
having ...
或类似的东西,如果上面的东西没有工作
select ...
from (
select ...
from ...
where ...
group by ...
having ...
) x
where ...
答案 3 :(得分:0)
试试这个,
Select distinct * From tableA where colB like '%test%'
答案 4 :(得分:0)
使用GROUP BY时,必须指定在查询中使用的所有列,并且不使用聚合函数。 所以,例如,
SELECT CLIENTID, COLA, COLB, COLC, COUNT(*) AS RC
FROM YOURTABLE
WHERE COLB LIKE '%test%'
GROUP BY CLIENTID, COLA, COLB, COLC
答案 5 :(得分:0)
只需使用: -
group by clientID,colA,colB,colC
而不是
group by clientID
演示: -
Create table testTable (clientID int , colA varchar(10), colB varchar(10), colC varchar(10))
go
insert into testTable values
(1,'test1','test2','test3'),
(1,'test1','ball2','test3'),
(2,'test1','ball2','test3'),
(2,'test1','ball2','test3'),
(3,'test1','test2','test3'),
(4,'test1','test2','test3'),
(4,'test1','test2','test3'),
(5,'test1','ball2','test3')
select * from testTable
where colB LIKE '%test%'
group by clientID,colA,colB,colC
输出: -
clientID colA colB colC
1 test1 test2 test3
3 test1 test2 test3
4 test1 test2 test3