TSQL 合并多个查询结果
TSQL Combine query results if more than one
SQL 服务器 2016 -
我有一个生成以下结果的查询,但想组合块子块的任何多个值,如果只有一个值,则显示该值。
SELECT
BLOCKS.[BLOCK-REF] AS [BLOCK-SUBB-REF]
, BLOCKS.[PLACE-REF]
, tenure.[ESTATE-CODE]
FROM [SQLViewsPro2EOD].[dbo].[IH-LOCATION] AS BLOCKS INNER JOIN
[SQLViewsPro2EOD].[dbo].[IH-LOCATION] AS SUBB ON BLOCKS.[BLOCK-REF] = SUBB.[PLACE-REF] inner join
[SQLViewsPro2EOD].[dbo].[IH_ESTATE] tenure on tenure.[ESTATE-CODE] = blocks.[ESTATE-CODE]
AND SUBB.[LOCATION-TYPE] IN ('BLOCK', 'SUBBLOCK', 'CBLOCK', 'HOSTEL', 'SCHEME') and SUBB.[BLOCK-REF] <> ''
and BLOCKS.[LOCATION-TYPE] in ('FLAT', 'BEDSIT', 'BUNG', 'DUPLEX', 'ENDTER', 'GFLAT', 'GFLATOG', 'HOSTEL', 'HOUSE', 'MAISON', 'SEMDET', 'ROOM')
WHERE
(BLOCKS.[LOCATION-STS] <> 'D')
|BLOCK-SUBB-REF | PLACE-REF | ESTATE-CODE|
|103 |1331 |PSLH |
|103 |1332 |GNSOC |
|103 |1333 |GNSOC |
|103 |1334 |GNSOC |
|104 |1335 |PSLH |
期望的输出
|BLOCK-SUBB-REF |Result
|103 | Mixed Results
|104 | PSLH
谢谢 - 感谢您的帮助
似乎您可以只使用 CASE
表达式并检查 MIN
和 MAX
值是否相同:
SELECT BLOCKS.[BLOCK-REF] AS [BLOCK-SUBB-REF],
CASE WHEN MIN(tenure.[ESTATE-CODE]) = MAX(tenure.[ESTATE-CODE]) THEN MAX(tenure.[ESTATE-CODE]) ELSE 'Mixed Results' END
FROM [SQLViewsPro2EOD].[dbo].[IH-LOCATION] BLOCKS
INNER JOIN [SQLViewsPro2EOD].[dbo].[IH-LOCATION] SUBB ON BLOCKS.[BLOCK-REF] = SUBB.[PLACE-REF]
INNER JOIN [SQLViewsPro2EOD].[dbo].[IH_ESTATE] tenure ON tenure.[ESTATE-CODE] = BLOCKS.[ESTATE-CODE]
AND SUBB.[LOCATION-TYPE] IN ('BLOCK', 'SUBBLOCK', 'CBLOCK', 'HOSTEL', 'SCHEME')
AND SUBB.[BLOCK-REF] <> ''
AND BLOCKS.[LOCATION-TYPE] IN ('FLAT', 'BEDSIT', 'BUNG', 'DUPLEX', 'ENDTER', 'GFLAT', 'GFLATOG', 'HOSTEL', 'HOUSE', 'MAISON', 'SEMDET', 'ROOM')
WHERE BLOCKS.[LOCATION-STS] <> 'D'
GROUP BY BLOCKS.[BLOCK-REF];
SQL 服务器 2016 - 我有一个生成以下结果的查询,但想组合块子块的任何多个值,如果只有一个值,则显示该值。
SELECT
BLOCKS.[BLOCK-REF] AS [BLOCK-SUBB-REF]
, BLOCKS.[PLACE-REF]
, tenure.[ESTATE-CODE]
FROM [SQLViewsPro2EOD].[dbo].[IH-LOCATION] AS BLOCKS INNER JOIN
[SQLViewsPro2EOD].[dbo].[IH-LOCATION] AS SUBB ON BLOCKS.[BLOCK-REF] = SUBB.[PLACE-REF] inner join
[SQLViewsPro2EOD].[dbo].[IH_ESTATE] tenure on tenure.[ESTATE-CODE] = blocks.[ESTATE-CODE]
AND SUBB.[LOCATION-TYPE] IN ('BLOCK', 'SUBBLOCK', 'CBLOCK', 'HOSTEL', 'SCHEME') and SUBB.[BLOCK-REF] <> ''
and BLOCKS.[LOCATION-TYPE] in ('FLAT', 'BEDSIT', 'BUNG', 'DUPLEX', 'ENDTER', 'GFLAT', 'GFLATOG', 'HOSTEL', 'HOUSE', 'MAISON', 'SEMDET', 'ROOM')
WHERE
(BLOCKS.[LOCATION-STS] <> 'D')
|BLOCK-SUBB-REF | PLACE-REF | ESTATE-CODE|
|103 |1331 |PSLH |
|103 |1332 |GNSOC |
|103 |1333 |GNSOC |
|103 |1334 |GNSOC |
|104 |1335 |PSLH |
期望的输出
|BLOCK-SUBB-REF |Result
|103 | Mixed Results
|104 | PSLH
谢谢 - 感谢您的帮助
似乎您可以只使用 CASE
表达式并检查 MIN
和 MAX
值是否相同:
SELECT BLOCKS.[BLOCK-REF] AS [BLOCK-SUBB-REF],
CASE WHEN MIN(tenure.[ESTATE-CODE]) = MAX(tenure.[ESTATE-CODE]) THEN MAX(tenure.[ESTATE-CODE]) ELSE 'Mixed Results' END
FROM [SQLViewsPro2EOD].[dbo].[IH-LOCATION] BLOCKS
INNER JOIN [SQLViewsPro2EOD].[dbo].[IH-LOCATION] SUBB ON BLOCKS.[BLOCK-REF] = SUBB.[PLACE-REF]
INNER JOIN [SQLViewsPro2EOD].[dbo].[IH_ESTATE] tenure ON tenure.[ESTATE-CODE] = BLOCKS.[ESTATE-CODE]
AND SUBB.[LOCATION-TYPE] IN ('BLOCK', 'SUBBLOCK', 'CBLOCK', 'HOSTEL', 'SCHEME')
AND SUBB.[BLOCK-REF] <> ''
AND BLOCKS.[LOCATION-TYPE] IN ('FLAT', 'BEDSIT', 'BUNG', 'DUPLEX', 'ENDTER', 'GFLAT', 'GFLATOG', 'HOSTEL', 'HOUSE', 'MAISON', 'SEMDET', 'ROOM')
WHERE BLOCKS.[LOCATION-STS] <> 'D'
GROUP BY BLOCKS.[BLOCK-REF];