Sql server 从笨拙的重复表中查询-使用“for each”循环、枢轴或游标?
我有两个包含大量列的表,我需要将它们放入一个可用于前端编程的表中 第一个表有定义,第二个表有数据。每个表的第一部分都有一些附加数据,用于连接的匹配: 表1各栏: 表2列: 我希望能够选择一个日期范围,并为每个列“xxx”输出以下格式的表格: 期望输出: 我可以为每一列使用一个简单的join语句来实现这一点,但是这很难管理超过400列,这可能会增加。我的直觉是做一个类似以下的循环:Sql server 从笨拙的重复表中查询-使用“for each”循环、枢轴或游标?,sql-server,tsql,loops,cursor,pivot,Sql Server,Tsql,Loops,Cursor,Pivot,我有两个包含大量列的表,我需要将它们放入一个可用于前端编程的表中 第一个表有定义,第二个表有数据。每个表的第一部分都有一些附加数据,用于连接的匹配: 表1各栏: 表2列: 我希望能够选择一个日期范围,并为每个列“xxx”输出以下格式的表格: 期望输出: 我可以为每一列使用一个简单的join语句来实现这一点,但是这很难管理超过400列,这可能会增加。我的直觉是做一个类似以下的循环: for each value in ('001', '002', '003'................
for each value in ('001', '002', '003'.................'400')
-->loop code for single column concatenating the value each time
现在我知道这既不高效也不明智,所以我正在寻找处理如此大量列的最佳方法
编辑:以下要求的一些示例数据:
表1:
表2:
期望输出
更可能的情况是,您可以使用一个视图来连接这两个表。 如果您在为该查询编写400列查询时遇到问题,您至少可以执行一些查询来编写该查询 我建议您可以做如下操作:
Select sc0.name
from sys.sysobjects so0
join sys.syscolumns sc0 on sc0.id = so0.id
join sys.syscolumns sc1 on sc1.name = so0.name
join sys.sysobjects so1 on sc1.id = so1.id
where so0.xtype = N'U' and so1.xtype = N'U'
and so0.name = N'Table 1'
and so1.name = N'Table 2'
上面的查询将返回两个表中所有匹配的列。
使用它来自动创建视图并使用视图。您是否看起来像这样,不是真的,我认为该示例将相似的行放在一起,组合一列,我有大量的列,不需要新表中同一行的数据,谢谢,请坦率地解释lil more。输出不清楚。什么是列“xxx”?如何命名\u A\u xxx+名称\u B\u xxx?用“001”、“002”中的值替换xxx,例如'003'……'400',那么Name_A_001+Name_B_001,然后下一个循环将是Name_A_002+Name_B_002;在示例中使两个表都简短,只说10列。用样本数据填充。现在将传递什么参数以及输出应该是什么样子。使用sq l-fiddle man。肯定会使用我给出的链接。有什么问题吗否则,列名以001或002结尾。谢谢,我的连接工作正常,这是我的问题,这是自动化的,从逻辑上讲,我会使用where循环遍历每个列,但我知道这对于SQL来说是错误和低效的
Date
Machine
plan_number
plan_version
plan_name
Name_A_xxx + Name_B_xxx
Count_xxx
for each value in ('001', '002', '003'.................'400')
-->loop code for single column concatenating the value each time
MACHINE PLAN_NUMBER PLAN_VERSION PLAN_NAME Name_A_001 Name_B_001 Name_A_002 Name_B_002 Name_A_003 Name_B_003 Name_A_004 Name_B_004 Name_A_005 Name_B_005
3989 1 5 COMBINED_101 DUB_INW_D_124 Top PTL_INW_N_423 CRK_INW_U_325 CRK_INW_S_323 PTL_INW_L_421
3994 1 5 COMBINED_102 DUB_INW_D Top PTL_INW_N CRK_INW_U CRK_INW_S PTL_INW_L
Date MACHINE PLAN_NUMBER PLAN_VERSION COUNT_001 CHECK_001 COUNT_002 CHECK_002 COUNT_003 CHECK_003 COUNT_004 CHECK_004 COUNT_005 CHECK_005
11/02/2014 3989 1 5 4 0 39 0 11 0 2 0 1 0
11/02/2014 3989 1 5 2 0 51 0 16 0 1 0 6 0
11/02/2014 3994 2 15 44 1 317 0 275 1 124 0 106 0
11/02/2014 3989 1 5 11 0 112 0 61 0 15 0 7 0
11/02/2014 3989 1 5 64 0 543 0 0 0 114 0 4 0
11/02/2014 3994 2 15 61 0 734 1 0 0 101 0 4 0
11/02/2014 3989 1 5 0 0 0 0 0 0 0 0 0 0
11/02/2014 3989 1 5 166 0 1344 0 0 0 215 0 32 1
11/02/2014 3994 2 15 13 0 87 0 0 0 35 0 1 0
11/02/2014 3989 1 5 3 0 9 0 0 0 1 0 0 0
Date MACHINE PLAN_NUMBER PLAN_VERSION PLAN_NAME Name_A_xxx + Name_B_xxx Count_xxx
11/02/2014 3989 1 5 COMBINED_101 DUB_INW_D_124 Top 4
11/02/2014 3989 1 5 COMBINED_101 DUB_INW_D_124 Top 2
11/02/2014 3994 2 15 COMBINED_102 DUB_INW_D Top 44
11/02/2014 3989 1 5 COMBINED_101 DUB_INW_D_124 Top 11
11/02/2014 3989 1 5 COMBINED_101 DUB_INW_D_124 Top 64
11/02/2014 3994 2 15 COMBINED_102 DUB_INW_D Top 61
11/02/2014 3989 1 5 COMBINED_101 DUB_INW_D_124 Top 0
11/02/2014 3989 1 5 COMBINED_101 DUB_INW_D_124 Top 166
11/02/2014 3994 2 15 COMBINED_102 DUB_INW_D Top 13
11/02/2014 3989 1 5 COMBINED_101 DUB_INW_D_124 Top 3
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_N_423 39
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_N_423 51
11/02/2014 3994 2 15 COMBINED_102 PTL_INW_N 317
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_N_423 112
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_N_423 543
11/02/2014 3994 2 15 COMBINED_102 PTL_INW_N 734
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_N_423 0
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_N_423 1344
11/02/2014 3994 2 15 COMBINED_102 PTL_INW_N 87
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_N_423 9
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_U_325 11
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_U_325 16
11/02/2014 3994 2 15 COMBINED_102 CRK_INW_U 275
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_U_325 61
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_U_325 0
11/02/2014 3994 2 15 COMBINED_102 CRK_INW_U 0
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_U_325 0
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_U_325 0
11/02/2014 3994 2 15 COMBINED_102 CRK_INW_U 0
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_U_325 0
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_S_323 2
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_S_323 1
11/02/2014 3994 2 15 COMBINED_102 CRK_INW_S 124
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_S_323 15
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_S_323 114
11/02/2014 3994 2 15 COMBINED_102 CRK_INW_S 101
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_S_323 0
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_S_323 215
11/02/2014 3994 2 15 COMBINED_102 CRK_INW_S 35
11/02/2014 3989 1 5 COMBINED_101 CRK_INW_S_323 1
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_L_421 1
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_L_421 6
11/02/2014 3994 2 15 COMBINED_102 PTL_INW_L 106
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_L_421 7
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_L_421 4
11/02/2014 3994 2 15 COMBINED_102 PTL_INW_L 4
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_L_421 0
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_L_421 32
11/02/2014 3994 2 15 COMBINED_102 PTL_INW_L 1
11/02/2014 3989 1 5 COMBINED_101 PTL_INW_L_421 0
Select sc0.name
from sys.sysobjects so0
join sys.syscolumns sc0 on sc0.id = so0.id
join sys.syscolumns sc1 on sc1.name = so0.name
join sys.sysobjects so1 on sc1.id = so1.id
where so0.xtype = N'U' and so1.xtype = N'U'
and so0.name = N'Table 1'
and so1.name = N'Table 2'