【问题标题】:How to aggregate data in rows into several and perform other SQL operation with them?如何将行中的数据聚合成多个并用它们执行其他 SQL 操作?
【发布时间】:2016-11-02 03:45:05
【问题描述】:

我有一个表格(从某个表格中选择的结果,按更改列排序),如下所示:

ID      Change
1001    4
1002    4
1003    4
1004    3
1005    3
1006    2
...     ...

我想用上面的数据更新另一个表,如下所示:

update sometable set columnA=columnA + 4 where ID in (1001, 1002, 1003)
update sometable set columnA=columnA + 3 where ID in (1004, 1005)
update sometable set columnA=columnA + 2 where ID in (1006)
...

如何使用 SQL 命令执行此操作?

【问题讨论】:

    标签: sql sql-server r sqlcommand


    【解决方案1】:

    在测试样本数据中试试这个,

    declare @t table(ID int,Change int)
    insert into @t values (1001,4),(1002,4),(1003,4),(1004,3),(1005,3),(1006,2)
    
    update s set s.columnA=s.columnA + t.change 
    from sometable S
    inner join @t t on s.id=t.id
    

    【讨论】:

      【解决方案2】:

      对于您的情况,以下是架构..

          CREATE TABLE #TAB(ID INT,      Change INT)
          INSERT INTO #TAB
          SELECT 1001 ,   4
          UNION ALL
          SELECT 1002,    4
          UNION ALL
          SELECT 1003  ,  4
          UNION ALL
          SELECT 1004,    3
          UNION ALL
          SELECT 1005 ,   3
          UNION ALL
          SELECT 1006,    2
      

      现在我们可以使用 For XML Path and Stuff 和 CTE 来处理它,如下所示

          ;WITH CTE AS(
           SELECT DISTINCT CHANGE
          ,STUFF( (SELECT ', '+CAST(ID AS VARCHAR(100))  FROM #TAB T2 
           WHERE T2.Change= T.CHANGE  FOR XML PATH('')),1,1,'') ID_PK FROM #TAB T
          )
          SELECT 'UPDATE SOMETABLE SET COLUMN_A= COLUMN_A+ '+CAST(CHANGE AS VARCHAR(10))+' WHERE ID IN ('+ID_PK +') ;'  FROM  CTE 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 1970-01-01
        • 2019-01-17
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        相关资源
        最近更新 更多