Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 Server中隔离列值_Sql_Sql Server_Tsql_Split - Fatal编程技术网

在SQL Server中隔离列值

在SQL Server中隔离列值,sql,sql-server,tsql,split,Sql,Sql Server,Tsql,Split,我有一个表,有两列(Col1&Col2),值存储如下: Col1 Col2 A/B/C Red/Orange/Green D/E Red/Orange 我希望输出如下 Col1 Col2 A Red B Orange C Green D Red E Orange 不容易,但可行 我会通过“展平”桌子来做到: SELECT (l

我有一个表,有两列(
Col1
&
Col2
),值存储如下:

Col1          Col2
A/B/C         Red/Orange/Green
D/E           Red/Orange
我希望输出如下

Col1        Col2
A           Red
B           Orange
C           Green
D           Red
E           Orange
不容易,但可行

我会通过“展平”桌子来做到:

SELECT (left bit of column 1), (left bit of column2)

UNION ALL

SELECT (middle bit of column 1), (middle bit of column 2)
where [column 1] like '%/%'

UNION ALL

SELECT (last bit of column 1), (last bit of column 2)
where [column 1] like '%/%/%'
如果可能会有更多的斜杠和数据,则需要添加更多的联合


使用CHARINDEX查找斜杠和子字符串以提取位。

是否尝试了交叉应用?请将“您的表名”替换为表名。它应该可以工作,只是复制和粘贴

   SELECT Col1, value AS Col2  INTO Table_2
    FROM your_table_name
    CROSS APPLY STRING_SPLIT(Col2, '/');  

   SELECT Col2, value AS Col1  INTO Table_3
    FROM Table_2
    CROSS APPLY STRING_SPLIT(Col1, '/'); 

   SELECT * FROM Table_3;

也许“字符串拆分”能帮上忙?
请看示例D和E,不幸的是,SQL Server中内置的字符串拆分函数没有返回字符串中的位置。在我看来,这是一个重大的疏忽

假设字符串没有重复值,可以使用
row\u number()
charindex()
添加枚举:

select t.*, ss.*
from t cross apply
     (select s1.value as value1, s2.value as value2
      from (select s1.value,
                   row_number() over (order by charindex('/' + s1.value + '/', '/' + t.col1 + '/')) as pos
            from string_split(t.col1, '/') s1
           ) s1 join
           (select s2.value,
                   row_number() over (order by charindex('/' + s2.value + '/', '/' + t.col2 + '/')) as pos
            from string_split(t.col2, '/') s2
           ) s2
           on s1.pos = s2.pos
     ) ss;

这是一个数据库文件。

这是一个在SQL Server之外更容易处理的文件。考虑把你的数据模型固定到数据库中。我需要做的是SQL Server,这就提醒了我,为什么我非常喜欢PASGRES: <代码>从Tyx表交叉连接UNNEST(Trasythtoto数组(COL1,'/'),Strugtoto数组(COL2,'/'))作为T(C1,C2)< /代码>(SCNR),链接副本在我的眼中是不正确的…这个问题是关于至少拆分两个值并按其位置匹配项。这里的答案并没有真正的帮助…Shubham,哪个版本的SQL Server?好的,我想他/她想要Col2中对应于Col1的所有值。如果是关于匹配对,那么我的解决方案就不合适了。From:“输出行的顺序可能是任意的。顺序不能保证与输入字符串中的子字符串的顺序相匹配。”对于某些情况,也有4或5个值包含由/Yes分隔的值,只需复制并粘贴接头/选择并进行一些小的修改-原则是,我已经使用了20或30个接头,没有问题。不优雅,但它可以工作。From:“输出行可以是任意顺序。顺序不能保证与输入字符串中子字符串的顺序匹配。”