【问题标题】:Multiple Joins on Same Table but Different Values同一表上的多个联接但值不同
【发布时间】:2021-10-10 18:26:49
【问题描述】:

我有一个系统,用户可以在填写应用程序时从不同字段中选择多个值。这些多值字段的所有各种值都包含在一个表中,通过应用程序 ID 链接到用户的输入应用程序。 (我不会这样设计它,但我继承了数据库)。我正在尝试编写一个 select 语句,根据表 1 中的唯一行查询表 2 中的多行。

所以,表格看起来像这样:

应用表(表1)

Application_ID Applicant_Name Application_Title Application_Date
1073 John Smith John's Application 07/15/2021
2104 Belinda Jones Belinda Applies 07/29/2021

选择表(Table2)

Application_ID Name Value Sort_Order
1073 State Texas 2
1073 State Ohio 1
1073 Color Red 2
1073 Color Blue 1
1073 Color Orange 2
2104 Color Green 1
2104 Color Purple 2
2104 State Delaware 1

我之前使用左连接从选择表中的一个多值字段中提取值:

选择 Left(Selection,Value,100) 作为“状态”

以及稍后在 where 原因中,使用以下方法定义哪一行:

其中 Selection.Name = '状态' 和 Selection.Sort_order = 1

但我无法找出编写选择语句的最佳方法,该语句从每个应用程序 ID 的选择表中提取所有值。我需要将所有多值字段(表 2 中的名称)中的值与一个应用程序 ID 关联。

【问题讨论】:

  • 你的输出是什么?
  • 您使用的是什么平台?您可以将答案分组到一个逗号分隔的列表中,但是在不同的数据库上您的做法是不同的
  • 我也不认为这是您实际使用的代码,因为Left(Selection,Value,100) 是语法错误
  • 我正在使用 SSMS。
  • 我以前从未遇到过使用 Left(table,Value,length) 语法的任何问题,只要我在 Where 子句中确定了我要查找的值。

标签: sql join select ssms


【解决方案1】:

我认为您需要在这里进行一些条件聚合 -

SELECT Applicant_Name, Application_Title, Application_Date,
       STRING_AGG(iif(Name = 'State', Value, ''), ',') STATE,
       STRING_AGG(iif(Name = 'Color', Value, ''), ',') COLOR
  FROM Table1 T1
  LEFT JOIN Table2 T2 ON T1.Application_ID = T2.Application_ID
 GROUP BY Applicant_Name, Application_Title, Application_Date;

【讨论】:

  • 我没有看到选择哪个状态的任何逻辑——我认为他想要所有这些。
  • 正确,Hogan,我需要来自与应用程序 ID 相关的所有名称的所有值,而不是任何特定的值或名称。以前我只需要使用一个可以通过排序顺序轻松定义的特定值,但我在扩展它时遇到了麻烦。
  • 这就是我得到的:Msg 105, Level 15, State 1, Line 2 字符串 'STATE' THEN Value END 之后的未闭合引号) STATE, STRING_AGG(CASE WHEN Name = '颜色'然后值结束)颜色
  • @eec41516,立即尝试。
  • 它告诉我:'STRING_AGG' 不是一个公认的内置函数名。
猜你喜欢
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
相关资源
最近更新 更多