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



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

我使用的表是用一个名为"RecordTypeA"的列创建的,它是一个具有(1和0)条目的位数据类型。1 =类型A, 0 =类型b

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

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

场景2(同一日期的存储返回两行):

第一行- RecordTypeA = '1'
行二- RecordTypeA = '0'(列仍然命名为RecordTypeA,但值'0'意味着不同的东西,所以我想创建一个列名?)

场景3(存储日期的一行返回):
RecordTypeA列value = '0'
表中有一行用于存储和日期,RecordTypeA列= '0':

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

我得到的是

StoreID Date RecordTypeA

1234 2020-01-04 0

1234 2020-01-05 0

2019-01-05 1

需要:

StoreID日期RecordTypeA RecordTypeB

1234 2020-01-04 0 NULL

1234 2020-01-05 01

我试过添加case语句,但我没能根据需要得到一行。此外,搜索和尝试PIVOT语句(我不真正理解PIVOT),但我在RecordTypeA位类型上得到一个错误。

当s.RecordTypeA = '1'时,'TypeA' Else 'Null'结束为Types.RecordTypeA = '0'则'TypeB' Else 'Null'结束为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
...

我在示例中使用相同的别名,因为使用联合所有,所有查询必须具有相同的列,因此您可以使用CONCAT将来自不同查询的所有数据放在一列中,列"TYPE"是用于查询结果的差异。

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

对于多个查询,您可以为类型A, B, C到Z定义您想要的定义标准,但所有这些都在一个结果中。

重要:Union all语句在某种程度上对性能来说是沉重的,所以要记住它。

最新更新