Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
T-SQL将表连接到自身,并为列中的所有值显示一行中的值_Sql_Sql Server_Join - Fatal编程技术网

T-SQL将表连接到自身,并为列中的所有值显示一行中的值

T-SQL将表连接到自身,并为列中的所有值显示一行中的值,sql,sql-server,join,Sql,Sql Server,Join,如果以前有人问过这个问题,我很抱歉。我已经寻找这个答案好几天了,显然找不到正确的搜索词组合 我基本上有一个表,其中多个记录由一列关联。看起来基本上是这样的 ColA | ColB | ColC 1 | A | B 1 | C | D 1 | E | D 因此,列A将具有与记录相关的相同值。我需要根据B列在C列中的值选择B列的值。有意义吗?基本上,对于这组数据,我需要底部的两行数据,第一行的ColB值除外。看起来像这样 ColA | ColB

如果以前有人问过这个问题,我很抱歉。我已经寻找这个答案好几天了,显然找不到正确的搜索词组合

我基本上有一个表,其中多个记录由一列关联。看起来基本上是这样的

ColA | ColB | ColC
1    |   A  |   B
1    |   C  |   D
1    |   E  |   D
因此,列A将具有与记录相关的相同值。我需要根据B列在C列中的值选择B列的值。有意义吗?基本上,对于这组数据,我需要底部的两行数据,第一行的ColB值除外。看起来像这样

ColA  |  ColB  |  ColC
 1    |   A    |   D
 1    |   A    |   D
这是我的select语句,我已开始返回太多记录

SELECT 
    ColA, ColB, ColC, 
FROM 
    TABLE as T1 
INNER JOIN
    TABLE as T2 on T2.ColA = T1.ColA  

我想这就是你想要达到的目标。试试下面的脚本

CREATE TABLE #temp
    (
      ColA INT
    , ColB CHAR(1)
    , ColC CHAR(1)
    );
INSERT  INTO #temp
        ( ColA, ColB, ColC )
VALUES  ( 1  -- ColA - int
          , 'A'  -- ColB - char(1)
          , 'B'  -- ColC - char(1)
          ),
        ( 1  -- ColA - int
          , 'C'  -- ColB - char(1)
          , 'D'  -- ColC - char(1)
          ),
        ( 1  -- ColA - int
          , 'E'  -- ColB - char(1)
          , 'D'  -- ColC - char(1)
          );

DECLARE @ColCValue CHAR(1)= 'D';

SELECT  Tbl1.*
FROM    #temp AS Tbl1
        INNER JOIN #temp AS Tbl2
        ON Tbl2.ColA = Tbl1.ColA
WHERE   Tbl1.ColC = @ColCValue
GROUP BY Tbl1.ColC
      , Tbl1.ColA
      , Tbl1.ColB;

您只是缺少
WHERE
caluse

试试这个:

样本数据:

CREATE TABLE #temp
    (
      ColA INT
    , ColB CHAR(1)
    , ColC CHAR(1)
    );
INSERT  INTO #temp
        ( ColA, ColB, ColC )
VALUES  ( 1 , 'A', 'B' ), 
        ( 1 , 'C', 'D'),
        ( 1, 'E', 'D');      
查询:

SELECT  T1.ColA,T1.ColB,T2.ColC
FROM    #temp AS T1
        INNER JOIN #temp AS T2
        ON T1.ColA = T2.ColA
WHERE   T2.ColC = 'D' AND T1.ColB = 'A' 
结果:


我不清楚B和C是如何关联的,也不清楚为什么“对于这组数据”,这是您需要的结果。您正在使用的查询也不做任何事情来关联它们,只是在ColA中具有公共值的所有行之间进行交叉连接。这里有很多遗漏的信息。
 SELECT 
        T1.ColA, T1.ColB, T2.ColC
    FROM 
        test  T1 , test  T2 
        where T1.colb='A' and T2.colc='D'