如何在 SQL 的同一行加入结果?

Posted

技术标签:

【中文标题】如何在 SQL 的同一行加入结果?【英文标题】:How to join with results on the same line in SQL? 【发布时间】:2017-01-09 20:54:55 【问题描述】:

这是我上一个问题的后续问题:How to get multiple rows of data into different columns

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

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

【问题讨论】:

这是一个很好的起点。 spaghettidba.com/2015/04/24/… 正如发布的那样,您的查询看起来应该会产生您正在寻找的结果。然而,我怀疑情况并非如此。我们需要一些细节来提供帮助。 为什么不使用 JOIN + GROUP BY 子句?你介意分享你的桌子吗? 【参考方案1】:

在旋转之前进行查找

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;

【讨论】:

我认为这可能有效。我将不得不再次更新我的问题。我将从这些表中的每一个中查找 3-4 列。我只是在旋转之前将它们全部归还吗?

以上是关于如何在 SQL 的同一行加入结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 的同一行上打印变量和字符串?

如何以编程方式在eclipse中的同一行上制作两个按钮?

如何在 Jupyter Notebook 的同一行上显示两个 SVG 图像

如何在 Android 的同一行中显示 2 个文本视图

如何在 MailChimp 的同一行上获取电子邮件输入和提交按钮?

如何在 SwiftUI 的同一行中使用粗体和普通文本