如何在SQL中与同一行上的结果联接?

如何在SQL中与同一行上的结果联接?,sql,sql-server,join,max,resultset,Sql,Sql Server,Join,Max,Resultset,这是我上一个问题的后续问题: 我的查询与上一个问题中提供的查询非常相似: SELECT AccountID, Value1 = MAX(CASE WHEN RN = 1 THEN Value END), Value2 = MAX(CASE WHEN RN = 2 THEN Value END), Value3 = MAX(CASE WHEN RN = 3 THEN Value END) FROM ( SELECT AccountID, Value = CONVER

这是我上一个问题的后续问题:

我的查询与上一个问题中提供的查询非常相似:

SELECT AccountID,
   Value1 = MAX(CASE WHEN RN = 1 THEN Value END),
   Value2 = MAX(CASE WHEN RN = 2 THEN Value END),
   Value3 = MAX(CASE WHEN RN = 3 THEN Value END)
FROM
(
SELECT AccountID,
       Value = CONVERT(VARCHAR(50), Value), -- Cast GUID as VARCHAR(50) to use MAX() in the outer query.
       RN = ROW_NUMBER() OVER (PARTITION BY AccountID ORDER BY Value)
FROM @myTable
) T
GROUP BY AccountID;
我的查询将数据输出到一行,如下所示:

AccountID                              Value1                                 Value2                                 Value3
6D68E2C9-4BF8-433B-8BC3-57D87348D034   F0BFA1B1-744A-4DBC-BE27-19D1618D77EA   E22A4B08-40DC-42E5-BC15-72A6912D0D66   A955B30C-5352-4B48-9E96-8A831AFA0751    
现在的问题是,我需要使用Value1、Value2和Value3中的值(另一个表中的主键)从另一个数据表中获取值。如果我加入这些值,我最终会得到三行。我必须做类似的事情还是使用枢轴

我最终会想要类似的东西:

Account Id                              Value1Table.Color    Value2Table.Color    Value3Table.Color   Value1Table.Size    Value2Table.Size 
6D68E2C9-4BF8-433B-8BC3-57D87348D034    Blue                 Red                  Orange              Large             Small
在旋转前进行查找:

SELECT AccountID,
       Value1 = MAX(CASE WHEN RN = 1 THEN Value END),
       Value2 = MAX(CASE WHEN RN = 2 THEN Value END),
       Value3 = MAX(CASE WHEN RN = 3 THEN Value END)
FROM (SELECT AccountID,
             Value = othertable.color.
             RN = ROW_NUMBER() OVER (PARTITION BY AccountID ORDER BY Value)
      FROM @myTable t JOIN
           othertable ot
           ON ot.value = t.value
     ) T
GROUP BY AccountID;
在旋转前进行查找:

SELECT AccountID,
       Value1 = MAX(CASE WHEN RN = 1 THEN Value END),
       Value2 = MAX(CASE WHEN RN = 2 THEN Value END),
       Value3 = MAX(CASE WHEN RN = 3 THEN Value END)
FROM (SELECT AccountID,
             Value = othertable.color.
             RN = ROW_NUMBER() OVER (PARTITION BY AccountID ORDER BY Value)
      FROM @myTable t JOIN
           othertable ot
           ON ot.value = t.value
     ) T
GROUP BY AccountID;

这是一个很好的起点。如前所述,您的查询似乎应该产生您所期望的结果。然而,我怀疑情况并非如此。我们需要一些细节以提供帮助。为什么不使用JOIN+GROUP BY子句?你介意和我分享你的桌子吗?这是一个很好的开始。如前所述,您的查询似乎应该产生您所期望的结果。然而,我怀疑情况并非如此。我们需要一些细节以提供帮助。为什么不使用JOIN+GROUP BY子句?你介意和我分享你的桌子吗?我想这可能行得通。我必须再次更新我的问题。我将从每个表中查找3-4列。我只是在旋转之前把它们都还回去吗?我想这可能行得通。我必须再次更新我的问题。我将从每个表中查找3-4列。我只是在旋转之前将它们全部返回吗?