Sql server 一个表-两个字段-相同值-T/SQL

Sql server 一个表-两个字段-相同值-T/SQL,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,资料来源: 当前查询尝试: CREATE TABLE #TempTab (ID INT, Value INT, Value1 varchar(10), Value2 varchar(10), value_ INT, Value1_ varchar(10), Value2_ varchar(10), Value3_ varchar(10), Limit INT) INSERT INTO #TempTab SELECT 1, 1,'One','One',1,'One','One','Yes',2 U

资料来源:

当前查询尝试:

CREATE TABLE #TempTab (ID INT, Value INT, Value1 varchar(10), Value2 varchar(10), value_ INT, Value1_ varchar(10), Value2_ varchar(10), Value3_ varchar(10), Limit INT)
INSERT INTO #TempTab
SELECT 1, 1,'One','One',1,'One','One','Yes',2
UNION ALL
SELECT 1, 1,'One','One',1,'One','Two','No',2
电流输出:

SELECT
    t1.ID,
    CA.Value3_
FROM
    #TempTab t1
    CROSS APPLY(
        SELECT 
            Value, 
            Value3_ 
        FROM 
            #TempTab t2
        WHERE
            t1.Value = t2.Value_ AND
            t1.Value1 = t2.Value1_ AND
            t1.Value2 = t2.Value2_ AND
            t1.Limit > 1
    ) CA

DROP TABLE #TempTab
期望输出:

ID  Value3_
1   Yes
1   Yes
目标:


我想返回记录(ID和Value3),其中Value、Value1和Value2与Value、Value1和Value2匹配。按照目前的逻辑,我得到两条记录。我只想要第1条记录(ID=1和Value3_u=“Yes”)。

问题在于,您正在将这两行与它们自己进行比较。我假设您只想找到第一行,但是第二行(t1)将与第一行(t2)匹配,这是您得到的第二个结果

不确定您在做什么,但您只需使用一个表即可获得该结果:

ID  Value3_
1   Yes

除了@JamesZ point之外,在

中检查此项,假设ID在原始临时表中是幂等的,例如,您的意思是:

SELECT
    t1.ID,
    t1.Value3_
FROM
    #TempTab t1
where
     t1.Value = t1.Value_ AND
     t1.Value1 = t1.Value1_ AND
     t1.Value2 = t1.Value2_ AND
     t1.Limit > 1
在使用同一个表时,消除双向联接的一种常见方法是使用
将自联接与主键进行比较,以消除对角线的“重复”一半。还请注意,如果您只处理表(即不是
函数
),则
连接
就足够了,而不是
交叉应用

CREATE TABLE #TempTab (ID INT, Value INT, Value1 varchar(10), Value2 varchar(10), 
                       value_ INT,  Value1_ varchar(10), Value2_ varchar(10), 
                       Value3_ varchar(10), Limit INT)
INSERT INTO #TempTab
SELECT 1, 1,'One','One',1,'One','One','Yes',2
UNION ALL
SELECT 2, 1,'One','One',1,'One','Two','No',2;

我不确定你的目标是什么。请你重新措辞好吗。谢谢你的两行实际上也有相同的
ID
吗?是的,这就是我要做的。不知道可以在一个表中包含WHERE子句,并将两个diff列等效为这样。。。非常感谢你!啊,我知道你做了什么。您进行了子查询并加入了外部。。。整洁的非常感谢。
SELECT
    t1.ID,
    x.Value3_
FROM
    #TempTab t1
    INNER JOIN (
        SELECT 
            ID,
            Value,
            Value1_, 
            Value2_, 
            Value3_ 
        FROM 
            #TempTab t2
      ) x
    ON
        t1.Value = x.Value AND
        t1.Value1 = x.Value1_ AND
        t1.Value2 = x.Value2_ AND
        t1.Limit > 1
        AND t1.ID > x.ID;