我有这样的 table

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

关于sql - 根据优先级从列中选择值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11880325/

10-11 02:42