我有两列我想要带回来,第一列(ID
)有多个与每个ID相关联的名称。这些值存在于同一个表中。
我不想更新实际的表格,并试图弄清楚如何添加/修改重复记录的名称。
理论上,我的查询最终会有两列:
ID Name
--------------------------
1 A
2 B
3 C1
3 C2
3 C3
有没有办法在提取时为重复值添加值而不更新实际表?
答案 0 :(得分:1)
这样的事情可以做到:
SELECT
ID
,
Name +
CASE
WHEN COUNT(*) OVER (PARTITION BY ID) = 1
THEN ''
ELSE CAST(ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS varchar)
END Name
FROM YourTable
答案 1 :(得分:0)
听起来像是在找VIEW
,就像这样:
CREATE VIEW dbo.vPartitioned AS
SELECT
ID,
char(64 + ID) +
CASE
WHEN COUNT(*) OVER (PARTITION BY ID) > 1 THEN CONVERT(nvarchar, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID))
ELSE ''
END Name
FROM [table]
然后,从视图而不是表中选择。但请注意,Name
的顺序是任意的,每次从视图中选择时都可能不一样。