Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-组合不同数量值的列_Sql_Sql Server - Fatal编程技术网

SQL-组合不同数量值的列

SQL-组合不同数量值的列,sql,sql-server,Sql,Sql Server,我有3个表,其中有不同的数据。具体来说,每个表中每个mainID的值数量不同。我想做的是编写一个查询,从3个表中获取信息,并将其转换为底部的“最终表” 表1 表2 表3 最终表格 谢谢您需要左键加入表2和表3与表1 像这样的东西应该对你有帮助 ;WITH tab1 AS (SELECT Row_number()OVER(partition BY [mainID] ORDER BY [value]) rn,* FROM Table1), tab2

我有3个表,其中有不同的数据。具体来说,每个表中每个mainID的值数量不同。我想做的是编写一个查询,从3个表中获取信息,并将其转换为底部的“最终表”

表1 表2 表3 最终表格
谢谢

您需要
左键加入
表2
表3
表1

像这样的东西应该对你有帮助

;WITH tab1
     AS (SELECT Row_number()OVER(partition BY [mainID] ORDER BY [value]) rn,*
         FROM   Table1),
     tab2
     AS (SELECT Row_number()OVER(partition BY [mainID] ORDER BY [value]) rn,*
         FROM   Table2),
     tab3
     AS (SELECT Row_number()OVER(partition BY [mainID] ORDER BY [value]) rn,*
         FROM   Table3)
SELECT a.mainID,
       a.value AS Table1Value,
       b.value AS Table2Value,
       c.value AS Table3Value
FROM   tab1 a
       LEFT JOIN tab2 b
              ON a.rn = b.rn
                 AND a.mainID = b.mainID
       LEFT JOIN tab3 c
              ON a.rn = c.rn
                 AND a.mainID = c.mainID 

注意:结果顺序没有列,因此结果顺序可能略有不同。如果您有任何列要排序结果,请将其添加到
行编号
窗口函数的
排序依据

左连接是您需要的,尽管您如何选择不将铅笔和奶昔与猫关联?你的逻辑或业务规则是什么?
mainID      value
------      ------
ID1         Pencil
ID2         Pencil
mainID      value
------      ------
ID1         Milkshake
ID1         Kool-Aid
ID2         Water
ID2         Soda
mainID      Table1Value       Table2Value        Table3Value
------      -----------       -----------        -----------
ID1         Dogs              Pencil             Milkshake
ID1         Cats                                 Kool-Aid
ID1         Elephant
ID1         Snake
ID1         Tiger
ID1         Lamb
ID2         Dogs              Pencil             Water
ID2         Cats                                 Soda
ID2         Elephant
ID2         Snake
ID2         Tiger
;WITH tab1
     AS (SELECT Row_number()OVER(partition BY [mainID] ORDER BY [value]) rn,*
         FROM   Table1),
     tab2
     AS (SELECT Row_number()OVER(partition BY [mainID] ORDER BY [value]) rn,*
         FROM   Table2),
     tab3
     AS (SELECT Row_number()OVER(partition BY [mainID] ORDER BY [value]) rn,*
         FROM   Table3)
SELECT a.mainID,
       a.value AS Table1Value,
       b.value AS Table2Value,
       c.value AS Table3Value
FROM   tab1 a
       LEFT JOIN tab2 b
              ON a.rn = b.rn
                 AND a.mainID = b.mainID
       LEFT JOIN tab3 c
              ON a.rn = c.rn
                 AND a.mainID = c.mainID