SQL 属于主 table 的查询列表作为主 table 上的列

SQL query lists belonging to main table as columns on main table

根据本主题中提出的问题,我有一个后续问题:

我已设法获得以下 table 以及上面主题中回答的查询:

uuid code title-en title-de
111-etc 123 english 123 deutch 123
222-etc 321 english 321 deutch 321

在我已有的结果旁边我想扩展 SQL 以根据另一个 table.

向结果添加额外的(动态)列

Table_1 和 table_1_lang(当然)是一样的:

table_1

uuid code
111-etc 123
222-etc 321

table_1_lang

uuid lang_code title
111-etc en english 123
111-etc de deutch 123
222-etc en english 321
222-etc de deutch 321

table_2(包含具有 0-n 个列表的动态列表)

uuid list_code value order
111-etc list_code_1 100 0
111-etc list_code_2 50 1
222-etc list_code_1 200 2
222-etc list_code_2 30 0
222-etc list_code_3 10 1

我要创建的结果(在上述结果旁边以及上一个主题中非常有用的答案)如下: 结果中列名中的“0”、“1”等是列表中的订单字段 table.

结果:

uuid code title-en title-de condition-0-list_code condition-0-value condition-1-list_code condition-1-value condition-2-list_code condition-2-value
111-etc 123 english 123 deutch 123 list_code_1 100 list_code_2 50
222-etc 321 english 321 deutch 321 list_code_2 30 list_code_3 10 list_code_1 200

我非常努力地尝试根据我已经收到的查询获得结果,并认为它只是对先前查询的 'extension' 但我的 SQL 知识不是很好.

总结一下我真正需要的: 使用上述 tables:

我想创建一组 'Result'。

'conditions' 的列名称必须根据值 'order' 和要在结果列中显示的列(list_code 和值)动态创建。

所以 uuid '111-etc' 在 table_2 中有 2 个条目,您将在结果的第 1 行看到这些值 -table.

'condition-2-list_code' 和 'condition-2-value' 在 uuid '111-etc' 的结果中为空,因为它们不存在于 table_2 中。对于 uuid '222-etc',这些值填入结果 table.

谁能帮帮我?非常感谢您的提前帮助,非常感谢。

您可以在 CROSS APPLY 内旋转。

对于两列数据透视表,通常只使用条件聚合会更容易 MAX(CASE WHEN

select
  t.uuid,
  t.code,
  [title-en] = len.title,
  [title-de] = lde.title,
  cond.*
from table_1 t
left join table_1_lang len on t.uuid = len.uuid and len.lang_code = 'en'
left join table_1_lang lde on t.uuid = lde.uuid and lde.lang_code = 'de'
CROSS APPLY (
    SELECT
      [condition-0-list_code] = MAX(CASE WHEN c.[order] = 0 THEN c.list_code END),
      [condition-0-value]     = MAX(CASE WHEN c.[order] = 0 THEN c.value END),
      [condition-1-list_code] = MAX(CASE WHEN c.[order] = 1 THEN c.list_code END),
      [condition-1-value]     = MAX(CASE WHEN c.[order] = 1 THEN c.value END),
      [condition-2-list_code] = MAX(CASE WHEN c.[order] = 2 THEN c.list_code END),
      [condition-2-value]     = MAX(CASE WHEN c.[order] = 3 THEN c.value END)
    FROM table_2 c
    WHERE c.uuid = t.uuid
) cond;

您也可以为 table_1_lang

执行此操作