我的数据库看起来与下面的类似。
ID A1 A2 A3 A4
7 2.31 2.31 2.31 2.32
8 2.32 2.32 2.32 2.32
9 2.31 2.3 2.31 2.31
10 2.32 2.3 2.32 2.31
现在我正在寻找一个SQL查询,它提供如下输出(从ID中选择A1,A2,A3,A4中最常用的值,并将其显示在A列中)
ID A
7 2.31
8 2.32
9 2.31
10 2.32
有人可以帮我这个..
答案 0 :(得分:7)
答案 1 :(得分:0)
您可以使用PIVOT尝试,如下所示:
CREATE TABLE #TABLE1 (
ID INT,
A1 DECIMAL(10,2),
A2 DECIMAL(10,2),
A3 DECIMAL(10,2),
A4 DECIMAL(10,2)
)
INSERT INTO #TABLE1 VALUES (7,2.31,2.31,2.31,2.32);
INSERT INTO #TABLE1 VALUES (8,2.32,2.32,2.32,2.32);
INSERT INTO #TABLE1 VALUES (9,2.31,2.3,2.31,2.31);
INSERT INTO #TABLE1 VALUES (10,2.32,2.3,2.32,2.31);
GO
select * from #TABLE1
SELECT ID, A
FROM (
SELECT
ID, A, count(A) as 'RepeatCount',
rank() over (partition by ID order by ID, count(A) desc) as 'ranked'
FROM (
SELECT ID, A1, A2, A3, A4
FROM #TABLE1
) pvt
UNPIVOT (
A FOR COL IN (A1, A2, A3, A4)
)AS unpvt
group by ID, A
)A
WHERE ranked = 1
ORDER BY ID
drop table #TABLE1
答案 2 :(得分:0)
由于每行只涉及4个值,因此只需要检查单个匹配对。因为如果有平局,你可以正确地返回两者中的任何一个。
利用这一点,除了if / else逻辑之外,你可以使用除了它之外的任何东西:
SELECT ID,
IIF (
A1 = A2 OR A1 = A3 OR A1 = A4,
A1,
IIF (
A2 = A3 OR A2 = A4,
A2,
A3)
) A FROM mytable
Giorgos Betsos发布的解决方案具有更清晰,更安全的逻辑 但很确定我的方法资源较少。