0

如何在 SQL Server 中选择具有多个列和表的不同值?

这是我的代码:

SELECT registryno,registrystatus,psPatRegisters.pattrantype,PK_psPatRegisters,
       payername,*
FROM psPatRegisters,psPatinv
WHERE psPatRegisters.PK_psPatRegisters=psPatinv.FK_psPatRegisters
    AND registryno between '7133' and '7169'
    AND psPatinv.pattrantype='I'
GROUP BY psPatRegisters.PK_psPatRegisters

我的代码有什么问题?

4

3 回答 3

2

删除“group by”和“*”并使用 distinct。或者您必须按所有选定的字段(不带 *)进行分组,此时不需要不同

于 2013-09-30T06:02:35.803 回答
0

这对你有用吗?

select distinct egistryno,registrystatus,
       psPatRegisters.pattrantype,PK_psPatRegisters,payername
from psPatRegisters,psPatinv
where psPatRegisters.PK_psPatRegisters=psPatinv.FK_psPatRegisters
and registryno between '7133' and '7169'
and psPatinv.pattrantype='I'

此外,您不能在没有聚合函数的情况下对不在分组子句中的列进行分组和选择。

于 2013-09-30T05:59:26.303 回答
0

Projection 中的所有列都在 Group By 中。

SELECT  registryno ,
    registrystatus ,
    psPatRegisters.pattrantype ,
    PK_psPatRegisters ,
    payername
FROM    psPatRegisters ,
    psPatinv
WHERE   psPatRegisters.PK_psPatRegisters = psPatinv.FK_psPatRegisters
    AND registryno BETWEEN '7133' AND '7169'
    AND psPatinv.pattrantype = 'I'
GROUP BY registryno ,
    registrystatus ,
    psPatRegisters.pattrantype ,
    PK_psPatRegisters ,
    payername

或使用DISTINCT关键字

SELECT  
DISTINCT
    registryno ,
    registrystatus ,
    psPatRegisters.pattrantype ,
    PK_psPatRegisters ,
    payername
FROM    psPatRegisters ,
    psPatinv
WHERE   psPatRegisters.PK_psPatRegisters = psPatinv.FK_psPatRegisters
    AND registryno BETWEEN '7133' AND '7169'
    AND psPatinv.pattrantype = 'I'

我认为如果您只想从结果中删除重复值,最好的方法是使用DISTINCT ,但如果您想使用聚合函数(如 Sum/Min/...),您最常使用Group By

于 2013-09-30T10:32:30.417 回答