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 拆分字符串后显示两个表之间的唯一数据_Sql_Sql Server_Sql Server 2016 - Fatal编程技术网

Sql 拆分字符串后显示两个表之间的唯一数据

Sql 拆分字符串后显示两个表之间的唯一数据,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,我有两个表,都包含4列。我希望查询中包含以下内容: 当两个表的前3列相同时 检查第4列,并将文本拆分为 如果文本100%相同(不查看订单) 然后显示这两个表之间的差异 这些表如下所示,例如: 表1: c1 |c2 | c3| column-text ------------------------------ | a | a | a | hello | ------------------------------ | a | a | b | text |

我有两个表,都包含4列。我希望查询中包含以下内容:

  • 当两个表的前3列相同时

  • 检查第4列,并将文本拆分为

  • 如果文本100%相同(不查看订单)

  • 然后显示这两个表之间的差异

  • 这些表如下所示,例如:

    表1:

     c1 |c2 | c3| column-text
    ------------------------------
    | a | a | a | hello          |
    ------------------------------
    | a | a | b | text           |
    ------------------------------
    | a | b | a | just;an;example|
    ------------------------------
    | a | b | b | st0ckexchange  |
    ------------------------------
    
    表2:

     c1 |c2 | c3| column-text
    ------------------------------
    | a | a | b | text           |
    ------------------------------
    | a | a | a | everyone;hello |
    ------------------------------
    | a | b | a | example;just;an|
    ------------------------------
    | a | b | b | stackoverflow  |
    ------------------------------
    
    结果将是:

     c1 |c2 | c3| column-text-t1 | column-text-t2
    ----------------------------------------------
    | a | b | b | hello          | everyone;hello|
    ----------------------------------------------
    | a | b | b | st0ckexchange  | stackoverflow |
    ----------------------------------------------
    
    目前我正在使用此查询:

    Select table1.c1, table1.c2, table1.c3, table1.column-text, table2.column-   text
    from table1 
    join table2 on table1.c1 = table2.c1 
                and table1.c2 = table2.c2 
                and table1.c3 = table2.c3
    where table1.column-text <> table2.column-text
    
    选择表1.c1、表1.c2、表1.c3、表1.column-text、表2.column-text
    来自表1
    将表2连接到表1.c1=表2.c1
    表1.c2=表2.c2
    表1.c3=表2.c3
    其中table1.column-text table2.column-text
    
    但这并不能解决使用
    拆分列文本中的字符串时的问题和混合

    抱歉,如果问题有点模糊,我在解释问题时遇到了很多麻烦

    Declare @Table1 table (c1 varchar(5), c2 varchar(5), c3 varchar(5),[column-text] varchar(50))
    Insert Into @Table1 values
    ('a','a','a','hello'),
    ('a','a','b','text'),
    ('a','b','a','just;an;example'),
    ('a','b','b','st0ckexchange')
    
    Declare @Table2 table (c1 varchar(5), c2 varchar(5), c3 varchar(5),[column-text] varchar(50))
    Insert Into @Table2 values
    ('a','a','b','text'),
    ('a','a','a','everyone;hello'),
    ('a','b','a','example;just;an'),
    ('a','b','b','stackoverflow')
    
    
    ;with cte as (
    Select *,Hits = sum(1) over (Partition by C1,C2,C3,Value)
     From (
            Select Src=1,* From @Table1
            Union All
            Select Src=2,* From @Table2
          ) A
     Cross Apply string_split([column-text],';') B
    )
    Select A.c1 
          ,A.c2
          ,A.c3
          ,[column-text-t1] = (Select max([column-text]) from @Table1 where c1=A.C1 and c2=A.c2 and c3=A.c3)
          ,[column-text-t2] = (Select max([column-text]) from @Table2 where c1=A.C1 and c2=A.c2 and c3=A.c3)
     From  cte A
     Where Hits=1
     Group By A.C1,A.C2,A.C3
    
    返回

    c1  c2  c3  column-text-t1  column-text-t2
    a   a   a   hello           everyone;hello
    a   b   b   st0ckexchange   stackoverflow
    

    您应该修复数据结构。您不应该以分隔字符串形式存储事物列表。@GordonLinoff您完全正确,但我确实从另一个程序中获取了这些数据,我正在读取这些数据。我与他们如何向我传递数据无关。我在其上运行它不会显示
    hello和everyone;你好
    tho?@wouterdejong更正。我有一个拖尾HAVING子句。Thiw被移除,链接也被移除updated@wouterdejong我添加了表变量作为演示。只需修改第一个查询并输入实际的表名。谢谢,现在我明白了,我仍然使用实际的表名测试它,但是在
    @wouterdejong附近得到了一个错误的语法。您是否替换了所有(at)表1和(at)表2共4个