我目前面临以下难题。
我需要转换它:
@string = 'TM_15 <= 0.574803 AND TM_3 <= 0.4 AND TM_9 <= 0.298738 AND TM_8 <= 0.30605
AND TM_16 <= 0.367816 AND TM_12 <= 0.341463 AND TM_10 <= 0.379487 AND TM_4 <= 0.44186
AND TM_2 <= 0.45 AND TM_7 <= 0.247525 AND TM_1 <= 0.6 AND TM_13 <= 0.28 AND TM_5 <= 0.285714
AND TM_11 <= 0.6 AND TM_6 <= 0.448276 AND TM_15 <= 0.285047 AND TM_14 <= 0.6
AND TM_12 <= 0.248366 AND TM_5 <= 0.245399 AND TM_16 <= 0.09375 AND TM_3 <= 0.372093
AND TM_15 <= 0.199713 AND TM_10 <= 0.326996 AND TM_9 <= 0.248731 AND TM_8 <= 0.279412
AND TM_13 <= 0.248577 AND TM_4 <= 0.311475 AND TM_2 <= 0.145833 AND TM_7 <= 0.213483
AND TM_11 <= 0.199029 AND TM_4 <= 0.165289'
进入类似于此的东西:
TM_0 TM_1 TM_2 TM_3 TM_4 TM_5 ... and on to 16
<= 0.6 <= 0.45 <= 0.4 <= 0.44186 <= 0.285714
<= 0.145833 <= 0.372093 <= 0.311475 <= 0.245399
<= 0.165289
我设法将值删除到各自的列和值中。我似乎无法插入表/表变量,它将尽可能小。我不希望找到一个包含超过30个条目的大型表格。理想情况下,对于上面的示例字符串值,最大表列数应为17,行数为4.其中左上空间为空或空白。
原因是在完成之后,该列将减少到最小值。
请发布任何建议或想法。
感谢
答案 0 :(得分:0)
绝对不知道你为什么要这样做,但你可以使用你选择的字符串拆分功能在你的问题中得到输出,如Sean Lange和pivot
的评论中提到的,你可以从中{ {1}}进入表格等:
insert
输出:
declare @string nvarchar(1000) = 'TM_15 <= 0.574803 AND TM_3 <= 0.4 AND TM_9 <= 0.298738 AND TM_8 <= 0.30605
AND TM_16 <= 0.367816 AND TM_12 <= 0.341463 AND TM_10 <= 0.379487 AND TM_4 <= 0.44186
AND TM_2 <= 0.45 AND TM_7 <= 0.247525 AND TM_1 <= 0.6 AND TM_13 <= 0.28 AND TM_5 <= 0.285714
AND TM_11 <= 0.6 AND TM_6 <= 0.448276 AND TM_15 <= 0.285047 AND TM_14 <= 0.6
AND TM_12 <= 0.248366 AND TM_5 <= 0.245399 AND TM_16 <= 0.09375 AND TM_3 <= 0.372093
AND TM_15 <= 0.199713 AND TM_10 <= 0.326996 AND TM_9 <= 0.248731 AND TM_8 <= 0.279412
AND TM_13 <= 0.248577 AND TM_4 <= 0.311475 AND TM_2 <= 0.145833 AND TM_7 <= 0.213483
AND TM_11 <= 0.199029 AND TM_4 <= 0.165289'
select r
,[TM_0]
,[TM_1]
,[TM_2]
,[TM_3]
,[TM_4]
,[TM_5]
,[TM_6]
,[TM_7]
,[TM_8]
,[TM_9]
,[TM_10]
,[TM_11]
,[TM_12]
,[TM_13]
,[TM_14]
,[TM_15]
,[TM_16]
from (
select row_number() over (partition by left(s.item,charindex(' ',s.item,1)-1) order by s.rn) as r
,left(s.item,charindex(' ',s.item,1)-1) as c
,substring(s.item,charindex(' ',s.item,1)+1,9999) as v
from dbo.fn_StringSplitMax(@string,'and ',null) as s
) as s
pivot (max(s.v) for c in([TM_0]
,[TM_1]
,[TM_2]
,[TM_3]
,[TM_4]
,[TM_5]
,[TM_6]
,[TM_7]
,[TM_8]
,[TM_9]
,[TM_10]
,[TM_11]
,[TM_12]
,[TM_13]
,[TM_14]
,[TM_15]
,[TM_16]
)
) as p
order by r
字符串拆分功能:
+---+------+---------+--------------+----------------+---------------+----------------+--------------+----------------+----------------+--------------+--------------+--------------+--------------+--------------+-----------+--------------+--------------+
| r | TM_0 | TM_1 | TM_2 | TM_3 | TM_4 | TM_5 | TM_6 | TM_7 | TM_8 | TM_9 | TM_10 | TM_11 | TM_12 | TM_13 | TM_14 | TM_15 | TM_16 |
+---+------+---------+--------------+----------------+---------------+----------------+--------------+----------------+----------------+--------------+--------------+--------------+--------------+--------------+-----------+--------------+--------------+
| 1 | NULL | <= 0.6 | <= 0.45 | <= 0.4 | <= 0.44186 | <= 0.285714 | <= 0.448276 | <= 0.247525 | <= 0.30605 | <= 0.298738 | <= 0.379487 | <= 0.6 | <= 0.341463 | <= 0.28 | <= 0.6 | <= 0.574803 | <= 0.367816 |
| 2 | NULL | NULL | <= 0.145833 | <= 0.372093 | <= 0.311475 | <= 0.245399 | NULL | <= 0.213483 | <= 0.279412 | <= 0.248731 | <= 0.326996 | <= 0.199029 | <= 0.248366 | <= 0.248577 | NULL | <= 0.285047 | <= 0.09375 |
| 3 | NULL | NULL | NULL | NULL | <= 0.165289 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | <= 0.199713 | NULL |
+---+------+---------+--------------+----------------+---------------+----------------+--------------+----------------+----------------+--------------+--------------+--------------+--------------+--------------+-----------+--------------+--------------+