我无法将SQL查询的输出格式化为我想要的格式。现在我有一些查询,我自己加入一个表来比较符合我标准的帐户的记录。一个简化的例子如下所示:
SELECT a.Field1
,a.Field2
,a.Field3
,b.Field1
,b.Field2
,b.Field3
FROM Table1 a
JOIN Table1 b
ON a.Field = b.Field
a和b的输出位于相同的行中,我想尝试将它们相互堆叠。有时会返回1000条记录。有没有一种简单的方法可以将b字段堆叠在相应的字段下面?经过一些研究后,我无法找到一种有效的方法来做到这一点,这不是完全手动和耗时的。
编辑:
我对第一篇文章中缺乏信息表示歉意。这可以更好地表示我的查询之一。
SELECT DISTINCT a.ID
,a.Field1
,a.Field2
,a.Field3
,a.Field4
,a.Field5
,a.Field6
,b.ID
,b.Field1
,b.Field2
,b.Field3
,b.Field4
,b.Field5
,b.Field6
FROM Table1 a
JOIN Table1 b
ON a.somefield = b.somefield
AND a.anotherfield = b.anotherfield
WHERE a.ID > b.ID
AND a.thisfield <> b.thisfield
AND a.field1 = 'something'
AND b.field1 = 'something'
鉴于某些领域不一定相等的标准是各种联合仍然是最合乎逻辑的方式?
答案 0 :(得分:1)
是否有一种简单的方法可以将b字段堆放在正下方 对应一个字段?
SELECT
Field1
,Field2
,Field3
FROM (
SELECT
a.Field1
,a.Field2
,a.Field3
,a.Field
FROM Table1 a
UNION ALL
SELECT
b.Field1
,b.Field2
,b.Field3
,b.Field
FROM Table1 b
) t
ORDER BY Field ASC
编辑原始问题后编辑:
您确实需要使用UNION来获取所需的格式,但我会将您当前的查询作为CTE开始并使用从中绘制的UNION,如下所示:
WITH cte AS (
SELECT DISTINCT a.ID AS A_ID
,a.Field1 AS A_Field1
,a.Field2 AS A_Field2
,a.Field3 AS A_Field3
,a.Field4 AS A_Field4
,a.Field5 AS A_Field5
,a.Field6 AS A_Field6
,b.ID AS B_ID
,b.Field1 AS B_Field1
,b.Field2 AS B_Field2
,b.Field3 AS B_Field3
,b.Field4 AS B_Field4
,b.Field5 AS B_Field5
,b.Field6 AS B_Field6
FROM Table1 a
JOIN Table1 b
ON a.somefield = b.somefield
AND a.anotherfield = b.anotherfield
WHERE a.ID > b.ID
AND a.thisfield <> b.thisfield
AND a.field1 = 'something'
AND b.field1 = 'something'
)
SELECT
A_ID
,B_ID
,A_Field1
,A_Field2
,A_Field3
,A_Field4
,A_Field5
,A_Field6
FROM cte
UNION ALL
SELECT
A_ID
,B_ID
,B_Field1
,B_Field2
,B_Field3
,B_Field4
,B_Field5
,B_Field6
FROM cte
ORDER BY A_ID, B_ID
如果您必须在结果中将ID列叠加在一起,那么您需要将UNION放在派生表中,就像我在第一个示例中所做的那样。但是你需要在基础UNION查询中同时使用ID来获得行顺序。