SQL左连接多行合并为一行

标签 sql sql-server database tsql

基本上,我有两个表,表 A 包含我关心的实际项目,表 B 用于语言翻译。

因此,例如,表 A 包含实际内容。任何时候在表中使用文本,而不是存储实际的 varchar 值,存储与表 B 中存储的文本相关的 ID。这允许我通过向表 B 添加一个 languageID 列,对表 B 中的同一行进行多种翻译数据库。

例子:

表A

  • 标题(整数)
  • 描述(整数)
  • 其他数据....

表B

  • TextID (int) - 这是列 其值存储在其他表中
  • 语言 ID(整数)
  • 文本(可变字符)

我的问题更多的是征求有关如何最好地处理这个问题的建议。理想情况下,我想要一个查询,我可以使用它从表中进行选择,并从表中获取文本而不是文本的 id。目前,当我在表中有两个文本项时,这就是我所做的:

SELECT C.ID, C.Title, D.Text AS Description
FROM
(SELECT A.ID, A.Description, B.Text AS Title
FROM TableA A, TranslationsTable B
WHERE A.Title = B.TextID AND B.LanguaugeID = 1) C
LEFT JOIN TranslationsTable D
ON C.Description = D.TextID AND D.LanguaugeID = 1

此查询为我提供了我要查找的表 A 中的行(使用内部 select 语句中的 where 语句)以及基于所用语言 ID 而不是文本 ID 的实际文本。

当我只使用一个或两个需要翻译的文本项时,这工作正常,但添加第三个或更多项时,它开始变得非常困惑 - 本质上是示例顶部的另一个左连接。

关于更好的查询有什么建议,或者至少是在一行中处理 3 个或更多文本项的好方法?

根据建议,我添加了两个表的示例:

    Table A  
    ---------------------------
    ID    |Title    |Description  
    ---------------------------  
    1     |1        |2  
    ---------------------------  
    2     |3        |4  
    --------------------------- 

    Table B (Translations Table) 
    ---------------------------
    ID    |LanguaugeID|Text  
    ---------------------------  
    1     |1        |Here is title one
    ---------------------------  
    1     |2        |Here is a title one in espanol
    ---------------------------
    2     |1        |Here is description one
    ---------------------------  
    2     |2        |Here is description one in espanol
    ---------------------------
    3     |1        |Title 2
    ---------------------------  
    4     |1        |Description 2
    ---------------------------   

我想要的是能够从表 A 中拉出一行,其中已经包含表 B 中的文本,而不仅仅是 ID - 并且能够对需要翻译的多个列执行此操作。

最佳答案

听起来您希望将一些行数据转换为列数据会有所帮助。在这种情况下,请在此处查找 PIVOT 功能

http://msdn.microsoft.com/en-us/library/ms177410.aspx

您可以编写一个查询来 PIVOT 输出文本,以便获得以下输出

ID、标题、描述、LanguageId、Text1、Text2、Text3、Text4

TSQL 中 PIVOT 的唯一缺点是您必须事先确定数据透视列的数量(在编写查询时)。但是,您可以通过编写动态 SQL 来克服这个问题。

关于SQL左连接多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561280/

相关文章:

sql - Synapse 专用池查询运行缓慢

c# - Entity Framework 、外键约束可能会导致循环或多条级联路径

sql - 使用 BigQuery 取消嵌套 customDimensions

mysql - 如何选择数据并为每个分组的选定值仅执行一次函数

sql - 如何传递参数进行查询?

java - 使用 cte 和变量输入优化 SQL 查询

sql-server - 如何自动填充 SQL Server 列

database - 是否可以在 Grails 应用程序中为非 PK 字段使用数据库序列?

php - 将新列添加到数据库表中,迁移失败并显示 - 无需迁移

sql-server - 是否有任何理由避免将 bigint 用作代理主键?