Tsql 选择case以在列中查找相同的数据

Tsql 选择case以在列中查找相同的数据,tsql,Tsql,我有这个需要的逻辑条件,希望有人能帮我编码这个 如果personid>1和ipeds列是相同的值,则报告该值,否则报告“多个” PersonId ipeds 408 3 408 3 656 6 656 1 我对此进行了编码,但当personid中的记录重复时,即使ipeds列不相同,也存在“多个”条件 (SELECT P.PersonId, CASE WHEN COUNT(P.PersonId) > 1 THEN

我有这个需要的逻辑条件,希望有人能帮我编码这个

如果personid>1和ipeds列是相同的值,则报告该值,否则报告“多个”

PersonId    ipeds
408         3
408         3
656         6
656         1
我对此进行了编码,但当personid中的记录重复时,即使ipeds列不相同,也存在“多个”条件

(SELECT
  P.PersonId, CASE WHEN COUNT(P.PersonId) > 1 THEN 'Multiple' ELSE MIN(I.Description) END AS IPEDS_Ethnicity
FROM
  PersonEthnicity AS P 
INNER JOIN
  IpedsFederalCategory AS I ON P.IpedsFederalCategoryId = I.IpedsFederalCategoryId
GROUP BY P.PersonId) AS QS ON PEOPLE.PersonId = QS.PersonId

如果希望仅当IPED不同时才显示“多个”,则应准备一个查询以消除重复。就在那时,你可以运用你的逻辑。检查以下示例:

create table #t (PersonId int, ipeds int)

INSERT INTO #t VALUES (408, 3), (408, 3), (409, 1), (500, 3), (500, 4)

;WITH dt AS (
    SELECT DISTINCT PersonId, ipeds
    FROM #t
)
SELECT
  P.PersonId, CASE WHEN COUNT(P.PersonId) > 1 
                    THEN 'Multiple' 
                    ELSE CAST(MIN(P.ipeds) as varchar(5)) END AS IPEDS_Ethnicity
FROM
  dt AS P 
GROUP BY P.PersonId
结果如下:
408 3
409 1

500倍

Fred,谢谢你的帮助。然而,当我运行您的示例时,这就是我得到的错误。“列'dt.ipeds'在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”当我将p.ipeds放入GROUP BY时,结果并没有如您所示。它显示为PersonId IPEDS_种族408 3 409 1 500 3 500 4该查询已修复。它缺少最小值(P.ipeds)