我在这个查询上已经苦苦挣扎很长时间了,非常感谢任何建议。给定以下SQL示例表:
CREATE TABLE #Table1
(
[First] VARCHAR(10),
[Last] VARCHAR(10),
[Priority] INT
)
INSERT INTO #Table1 ([First], [Last], [Priority])
VALUES ('My', 'Name', '1'), ('Her', 'Name', '1'), ('His', 'Name', '1');
CREATE TABLE #Table2
(
[First] VARCHAR(10),
[Last] VARCHAR(10),
[Priority] INT
)
INSERT INTO #Table2 ([First], [Last], [Priority])
VALUES ('My', 'Name', '2'), ('Her', 'Name', '2'), ('His', 'Name', '2');
CREATE TABLE #Table3
(
[First] VARCHAR(10),
[Last] VARCHAR(10),
[Priority] INT
)
INSERT INTO #Table3 ([First], [Last], [Priority])
VALUES ('My', 'Name', '3'), ('Her', 'Name', '3'), ('His', 'Name', '3');
我正在尝试仅查询表中具有最高优先级的每个名称的记录。以下查询返回所有表中的所有名称,而不是所需的结果。
SELECT
[First], [Last], [Priority]
FROM
(SELECT [First], [Last], [Priority]
FROM #Table1
UNION ALL
SELECT [First], [Last], [Priority]
FROM #Table2
UNION ALL
SELECT [First], [Last], [Priority]
FROM #Table3) D3
ORDER BY
[Priority] DESC
查询结果不是这样的:
First Last Priority
------------------------
My Name 3
Her Name 3
His Name 3
My Name 2
Her Name 2
His Name 2
My Name 1
Her Name 1
His Name 1
我尝试使用TOP 1,DISTINCT,MAX(Priority)过滤掉优先级较低的表值。但从未获得以下预期结果。
First Last Priority
------------------------
My Name 3
Her Name 3
His Name 3
在此先感谢您抽出宝贵的时间查看我的问题以及您可能提供的任何建议或指导。
干杯, 基因
答案 0 :(得分:0)
您可以尝试使用ROW_NUMBER
窗口函数按[First]
[Last]
列创建行号,然后获得第一行。
SELECT [First], [Last], [Priority]
FROM (
SELECT [First], [Last], [Priority],ROW_number() over(partition by [First], [Last] order by Priority desc) rn
FROM
(
SELECT [First], [Last], [Priority] FROM #Table1 UNION ALL
SELECT [First], [Last], [Priority] FROM #Table2 UNION ALL
SELECT [First], [Last], [Priority] FROM #Table3
) D3
) t1
where rn = 1
答案 1 :(得分:0)
从xxx组的“第一”,“最后”选择“第一,最后,最大(优先)”
应该可以。
SELECT
[First], [Last], max([Priority])
FROM
(SELECT [First], [Last], [Priority]
FROM #Table1
UNION ALL
SELECT [First], [Last], [Priority]
FROM #Table2
UNION ALL
SELECT [First], [Last], [Priority]
FROM #Table3) D3
GROUP BY First, Last