TSQL 不同列表,但如果是单个原始项目则带有额外数据
TSQL distinct list, but with extra data if a single original item
理想情况下,由于客户限制,我想要符合 SQL2008 的答案
我需要一个不同的项目列表,但是有一列 return 是一个特定的数据 如果 原始数据在第一个中只有一个项目地点...
示例数据...
Id Code
1 A
2 A
3 B
在上面的示例数据中,我想要 return 一个不同的 Code
列表,但是如果只存在该代码的一个实例,我希望 Id
是 returned(否则 null
)
预期输出...
Code Id
A null
B 3
我得到了以下内容,但感觉应该有更简单的方法,也许使用 GROUP BY
...
; WITH Data AS (
SELECT Code, Id ROW_NUMBER() OVER (PARTITION BY Code ORDER BY Id) AS RowNum
FROM MyTable
)
SELECT D1.Code, CASE (SELECT COUNT(*) FROM Data D2 WHERE D2.Code = D1.Code) WHEN 1 THEN D1.Id ELSE NULL END
FROM Data D1
WHERE D1.RowNum = 1
可以用更好的方式完成吗?
这里想到聚合:
SELECT Code, CASE WHEN COUNT(*) = 1 THEN MAX(Id) END AS Id
FROM MyTable
GROUP BY Code;
理想情况下,由于客户限制,我想要符合 SQL2008 的答案
我需要一个不同的项目列表,但是有一列 return 是一个特定的数据 如果 原始数据在第一个中只有一个项目地点...
示例数据...
Id Code
1 A
2 A
3 B
在上面的示例数据中,我想要 return 一个不同的 Code
列表,但是如果只存在该代码的一个实例,我希望 Id
是 returned(否则 null
)
预期输出...
Code Id
A null
B 3
我得到了以下内容,但感觉应该有更简单的方法,也许使用 GROUP BY
...
; WITH Data AS (
SELECT Code, Id ROW_NUMBER() OVER (PARTITION BY Code ORDER BY Id) AS RowNum
FROM MyTable
)
SELECT D1.Code, CASE (SELECT COUNT(*) FROM Data D2 WHERE D2.Code = D1.Code) WHEN 1 THEN D1.Id ELSE NULL END
FROM Data D1
WHERE D1.RowNum = 1
可以用更好的方式完成吗?
这里想到聚合:
SELECT Code, CASE WHEN COUNT(*) = 1 THEN MAX(Id) END AS Id
FROM MyTable
GROUP BY Code;