如何根据条件选择行

时间:2016-06-21 13:48:33

标签: sql tsql

以下是代码段。 只是我添加的设计目的。

此处将为用户分配多个组。

所以我想单独选择人员细节。

此处人员ID 103 对同一产品有两种不同的延迟。 但只有为此人选择更高的许可。 但如果他没有被分配到多个组,则应选择默认权限。

示例数据



ProdId	PersonId	GroupId	Permission

10103	78	        55          15 
10103	99	        33	    15
10103	100	        33	    0
10103	103	        33	    15
10103	103	        40	    0
10103	112	        33	    15




结果数据应为



ProdId	PersonId	Permission

    10103	78	        15 
    10103	99	        15
    10103	100	        0
    10103	103	        15
    10103	112	        15




2 个答案:

答案 0 :(得分:1)

您应该使用ROW_NUMBER()

SELECT * FROM (
    SELECT t.*, 
           ROW_NUMBER() OVER(PARTITION BY t.prodid,t.personID ORDER BY t.permission DESC) as rnk
    FROM YourTable t) s
WHERE s.rnk = 1

我认为你想要permission上的最高数字?如果没有,请将ORDER BY子句更改为您想要的内容。

现在它将选择所有列,指定您想要的列。

答案 1 :(得分:0)

如果您使用的是Oracle,请尝试以下查询..

select * from (
select ProdID, PersonID, Permission, row_number() over (partition by PersonID order by Permission Desc) as column1 from table1)
where column1 = 1;