我搜索了许多非规范化和多行到多列的帖子,似乎没有人做我想要的。
我有一个重复ID的表,其他字段中的值不同,ID可以有1-20行,具体取决于有多少相关记录。
示例:
Input -
ID Name Address
1 A A1
1 B A2
1 C A3
1 C A4
Output -
ID Name1 Address1 Name2 Address2 Name3 Address3 Name4 Address4
1 A A1 B A2 C A3 C A4
我写了一些非常丑陋的SQL,在插入之前检查每个字段,但我希望有一个更清晰的方法,因为这对变化非常不灵活。有任何想法!
COL_1 = (CASE WHEN COL_1 IS NULL THEN @CLINE ELSE COL_1 END),
COL_2 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NULL THEN @CLINE ELSE COL_2 END),
COL_3 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NULL THEN @CLINE ELSE COL_3 END),
COL_4 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NULL THEN @CLINE ELSE COL_4 END),
COL_5 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NULL THEN @CLINE ELSE COL_5 END),
COL_6 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NULL THEN @CLINE ELSE COL_6 END),
COL_7 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NULL THEN @CLINE ELSE COL_7 END),
COL_8 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NULL THEN @CLINE ELSE COL_8 END),
COL_9 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NULL THEN @CLINE ELSE COL_9 END),
COL_10 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NULL THEN @CLINE ELSE COL_10 END),
COL_11 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NULL THEN @CLINE ELSE COL_11 END),
COL_12 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NULL THEN @CLINE ELSE COL_12 END),
COL_13 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NULL THEN @CLINE ELSE COL_13 END),
COL_14 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NOT NULL and COL_14 IS NULL THEN @CLINE ELSE COL_14 END),
COL_15 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NOT NULL and COL_14 IS NOT NULL and COL_15 IS NULL THEN @CLINE ELSE COL_15 END),
COL_16 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NOT NULL and COL_14 IS NOT NULL and COL_15 IS NOT NULL and COL_16 IS NULL THEN @CLINE ELSE COL_16 END),
COL_17 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NOT NULL and COL_14 IS NOT NULL and COL_15 IS NOT NULL and COL_16 IS NOT NULL and COL_17 IS NULL THEN @CLINE ELSE COL_17 END),
COL_18 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NOT NULL and COL_14 IS NOT NULL and COL_15 IS NOT NULL and COL_16 IS NOT NULL and COL_17 IS NOT NULL and COL_18 IS NULL THEN @CLINE ELSE COL_18 END),
COL_19 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NOT NULL and COL_14 IS NOT NULL and COL_15 IS NOT NULL and COL_16 IS NOT NULL and COL_17 IS NOT NULL and COL_18 IS NOT NULL and COL_19 IS NULL THEN @CLINE ELSE COL_19 END),
COL_20 = (CASE WHEN COL_1 IS NOT NULL and COL_2 IS NOT NULL and COL_3 IS NOT NULL and COL_4 IS NOT NULL and COL_5 IS NOT NULL and COL_6 IS NOT NULL and COL_7 IS NOT NULL and COL_8 IS NOT NULL and COL_9 IS NOT NULL and COL_10 IS NOT NULL and COL_11 IS NOT NULL and COL_12 IS NOT NULL and COL_13 IS NOT NULL and COL_14 IS NOT NULL and COL_15 IS NOT NULL and COL_16 IS NOT NULL and COL_17 IS NOT NULL and COL_18 IS NOT NULL and COL_19 IS NOT NULL and COL_20 IS NULL THEN @CLINE ELSE COL_20 END),
谢谢, 马特
更新以显示最终输出: Output Example