SQL:查询基于组的参数设定值 [英] SQL: Query to set value based on group parameter

查看:149
本文介绍了SQL:查询基于组的参数设定值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要帮助写一个查询做在我的数据库表如下:

 选择,其中在列1的值是相同的所有行
    如果是'主'尚未设置在列2为其中的任何
        设置列2 ='主'组中第一行
    否则继续到下一个组
 

要点:我只可以为每个组中的一个'主'标签

样品输入:

 列1 |列2 |
ID1
ID1
ID1
ID2小学
ID2
ID3
ID3
 

样品结果:

 列1 |列2 |
ID1小学
ID1
ID1
ID2小学
ID2
ID3小学
ID3
 

感谢您!

解决方案

使用 ROW_NUMER 窗口功能找到每组的第一个记录,然后更新只记录其不列入有无列2 值>

由于没有可找我用每组的第一个记录列(选择空)

的示例数据

  CREATE TABLE #ee(列1 VARCHAR(50),列2 VARCHAR(50))

INSERT #ee
VALUES('ID1',NULL)
       (ID1,NULL)
       (ID1,NULL)
       (ID2,主),
       (ID2,NULL)
       (ID3,NULL)
       (ID3,NULL)
 

更新查询:

 ; WITH CTE
     AS(SELECT *,
                ROW_NUMBER()OVER(PARTITION BY列1 ORDER BY(SELECT NULL))RN
         从#ee一个
         WHERE NOT EXISTS(SELECT 1
                            从#ee b
                            WHERE a.Column1 = b.Column1
                                   与b.Column2 ='初级'))
UPDATE CTE
SET列2 ='主'
WHERE RN = 1
 

结果:

 列1列2
------- -------
ID1主
ID1空
ID1空
ID2小学
ID2空
ID3主
ID3空
 

I need help writing a query to do the following on a table in my DB:

Select all rows where the values in Column1 are the same
    If a 'Primary' has not been set in Column2 for any of them
        Set Column2 = 'Primary' for first row in the group 
    Else go on to the next group 

Key points: I can only have one 'Primary' tag per group

Sample input:

Column1 | Column2 | 
ID1                 
ID1                       
ID1                     
ID2       Primary
ID2       
ID3       
ID3       

Sample Result:

Column1 | Column2 | 
ID1       Primary         
ID1                       
ID1                     
ID2       Primary
ID2       
ID3       Primary   
ID3       

Thank you!

解决方案

Use ROW_NUMER window function to find the first record per group then update only the records which doesnot have primary value in column2

Since there is no column available to find the first record per group i have used (select null) in order by

Sample data

CREATE TABLE #ee(Column1 VARCHAR(50),Column2 VARCHAR(50))

INSERT #ee
VALUES ('ID1',NULL),
       ('ID1',NULL),
       ('ID1',NULL),
       ('ID2','Primary'),
       ('ID2',NULL),
       ('ID3',NULL),
       ('ID3',NULL) 

Update query:

;WITH cte
     AS (SELECT *,
                Row_number()OVER(partition BY column1 ORDER BY (SELECT NULL)) RN
         FROM   #ee a
         WHERE  NOT EXISTS (SELECT 1
                            FROM   #ee b
                            WHERE  a.Column1 = b.Column1
                                   AND b.Column2 = 'primary'))
UPDATE cte
SET    Column2 = 'primary'
WHERE  rn = 1 

Result:

Column1 Column2
------- -------
ID1     primary
ID1     NULL
ID1     NULL
ID2     Primary
ID2     NULL
ID3     primary
ID3     NULL

这篇关于SQL:查询基于组的参数设定值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆