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'