繁体   English   中英

SQL 如何返回将多行合并为一行的结果集

[英]SQL How to return a result set that will combine multiple rows into one row

我试图为每个商店编号和每个日期返回一行,其中包括该日期的 RecordTypeA 列中的所有值。

我正在使用的表是使用名为“RecordTypeA”的列创建的,它是一种具有(1 和 0)条目的位数据类型。 1 等于 A 型,0 等于 B 型。

如果在同一行的同一日期有 1 和/或 0 的条目,我想要做的是显示商店的 RecordTypeA 列的值。

场景 1(为日期的商店返回一行): RecordTypeA 列值 = '1'
表中有一行存储商店和日期,RecordTypeA 列 = '1':

场景二(同一天两排店铺退货):

第一行 - RecordTypeA = '1'
第二行 - RecordTypeA = '0' (该列仍命名为 RecordTypeA,但值 '0' 表示不同,所以我想创建一个列名?)

场景 3(当日商店返回一行):
RecordTypeA 列值 = '0'
表中有一行存储商店和日期,RecordTypeA 列 = '0':

我的问题是,当商店有 RecordtypeA = 0 和 RecordtypeA = 1 行时,我返回了多行。 我需要在同一行返回。 (创建同时包含 1 和 0 或 Null 的列。

我得到的是

StoreID 日期 RecordTypeA

1234 2020-01-04 0

1234 2020-01-05 0

1234 2020-01-05 1

需要:

StoreID 日期 RecordTypeA RecordTypeB

1234 2020-01-04 0 NULL

1234 2020-01-05 0 1

我尝试添加 in case 语句,但我无法根据需要获得一行。 此外,搜索并尝试了 PIVOT 语句(我并不真正了解 PIVOT),但我在 RecordTypeA Bit 类型上遇到错误。

Case when s.RecordTypeA = '1' Then 'TypeA' Else 'Null' End as s.RecordTypeA = '0' Then 'TypeB' Else 'Null' End as Type

SELECT r.StoreID,
r.CreatedDate,
s.RecordTypeA
From Request r
Inner Join Stores s on r.id = s.id
Group by r.StoreID,
r.CreatedDate,
s.RecordTypeA

欢迎来到堆栈溢出社区!

您是否尝试过构建 3 个查询并使用UNION ALL语句?

您可以为StoreID, Date, RecordTypeA, TypeBTypec创建查询。

例如:

SELECT CONCAT(r.StoreID, r.CreatedDate, s.RecordTypeA) AS DATA, 'A' AS TYPE
FROM YOURDATABASE.YOURTABLE
WHERE (A CRITERIA FOR TYPE A)

UNION ALL

SELECT CONCAT(r.StoreID, r.CreatedDate, s.RecordTypeA) AS DATA, 'B' AS TYPE
FROM YOURDATABASE.YOURTABLE
WHERE (A CRITERIA FOR TYPE B)

UNION ALL

...

我在示例中使用了相同的别名,因为使用 union all,所有查询必须具有相同的列,因此您可以使用 CONCAT 将来自不同查询的所有数据放在一列中,“TYPE”列用于区别结果中的查询。

即使您不使用 concat,您也可以返回不同的列,但所有查询在 select 上的列数必须相同。

通过多个查询,您可以为类型 A、B、C 到 Z 定义所需的条件,但将所有这些条件都放在一个结果中。

重要提示Union all语句在某种程度上对性能来说很重,所以请记住这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM