har*_*rry 5 sql sql-server sql-server-2008
我有这样的桌子
AMID输入 ------- --------- 1000火星 1001 JUPITER 1002土星 1003金星 1003土星 1004海王星 1004土星 1005 JUPITER 1005火星
现在,我要提取具有特定ENTRY值的DISTINCT AMID值。茶几应该是这样的
AMID输入 -------- -------- 1000火星 1001 JUPITER 1002土星 1003金星 1004土星 1005火星
选择ENTRY值的条件是,
它必须根据此优先级获取值:
- 金星
- 火星
- 木星
- 土星
- 海王星
因此,如果任何一个AMID同时具有金星和火星,则应采用金星
火星和土星,应采用火星
NEPTUNE和JUPITER,应采用JUPITER。(按优先级选择)。
您可以使用排名函数来完成此操作(如果您使用的是 SQL Server 2008):
DECLARE @t TABLE (AMID INT, Entry VARCHAR(100))
INSERT @t
VALUES
( 1000 ,'MARS'),
( 1001 ,'JUPITER'),
( 1002 ,'SATURN'),
( 1003 ,'VENUS'),
( 1003 ,'SATURN'),
( 1004 ,'NEPTUNE'),
( 1004 ,'SATURN'),
( 1005 ,'JUPITER'),
( 1005 ,'MARS')
;WITH a AS(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY AMID ORDER BY
CASE Entry
WHEN 'VENUS' THEN 0
WHEN 'MARS' THEN 1
WHEN 'JUPITER' THEN 2
WHEN 'SATURN' THEN 3
WHEN 'NEPTUNE' THEN 4
END) num
FROM @t
)
SELECT AMID, Entry
FROM a
WHERE num = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4641 次 |
| 最近记录: |