2016-06-10 34 views
0

我有一个场景,我需要获取优先级列的最小值并获取这些列的乘积并将其放入所有列中。选择最小值并更新所有行SQL

SD PL PRIO PRDT PNAME 
1 29 10  MM  CAR 
1 LI 20  SS  BRAKE 
1 AA 30  AA  ZZZZ 

由于优先级10是gorup SD的最小值1 MM应该像下面一样替换。

SD PL PRIO PRDT PNAME 
1 29 10  MM  CAR 
1 LI 20  MM  BRAKE 
1 AA 30  MM  ZZZZ 

您可以请帮助选择查询。

回答

3

您可以使用ROW_NUMBER

SELECT 
    t.SD, t.PL, t.PRIO, t2.PRDT, t.PNAME 
FROM YourTable t 
INNER JOIN(
    SELECT *, 
     ROW_NUMBER() OVER(PARTITION BY SD ORDER BY PRIO) AS rn 
    FROM YourTable 
) t2 
    ON t.SD = t2.SD 
WHERE t2.rn = 1 

如何使用相关子查询:如果你只想SELECT查询

UPDATE YourTable t 
    SET PRDT = (
     SELECT PRDT 
     FROM YourTable t2 
     WHERE 
      t2.SD = t.SD 
      AND t2.PRIO = (SELECT MIN(t3.PRIO) FROM YourTable t3 WHERE t3.SD = t.SD) 
    ) 
+0

我不想更新表格。选择查询将有所帮助。 – MKN

+0

@Mani更新了我的答案。 –

+0

感谢它的工作:) – MKN

0

试试这个。

SELECT COL1, 
    COL2, 
    MIN(COL3) OVER(PARTITION BY COL1 ORDER BY COL3 ASC) COL3, 
    COL4, 
    COL5 
FROM 
    (SELECT 1 COL1, '29' COL2, 10 COL3, 'MM' COL4, 'CAR' COL5 FROM DUAL 
    UNION ALL 
    SELECT 1 COL1, 'LI' COL2, 20 COL3, 'SS' COL4, 'BRAKE' COL5 FROM DUAL 
    UNION ALL 
    SELECT 1 COL1, 'AA' COL2, 30 COL3, 'AA' COL4 , 'ZZZZ' COL5 FROM DUAL 
    UNION ALL 
    SELECT 2 COL1, '29' COL2, 10 COL3, 'MM' COL4, 'CAR' COL5 FROM DUAL 
    UNION ALL 
    SELECT 2 COL1, 'LI' COL2, 05 COL3, 'SS' COL4, 'BRAKE' COL5 FROM DUAL 
    UNION ALL 
    SELECT 2 COL1, 'AA' COL2, 30 COL3, 'AA' COL4 , 'ZZZZ' COL5 FROM DUAL 
); 
+0

它不是COL3的最低限度。选择COL3等效COL4的最小值,并替换为COL4。 – MKN