我有一个包含3列的表格:
NameColumn CategoryColumn QuantityColumn
Name1 Category1 5
Name2 Category1 8
Name3 Category1 10
Name4 Category2 3
Name5 Category2 15
Name6 Category2 7
我需要编写一个查询来将上述数据转换为以下结果集:
NameColumn CategoryColumn QuantityColumn
Category1 NULL NULL
Name1 NULL 5
Name2 NULL 8
Name3 NULL 10
Category2 NULL NULL
Name4 NULL 3
Name5 NULL 15
Name6 NULL 7
无论如何不使用游标进行此操作? 感谢。
答案 0 :(得分:2)
SELECT NameColumn, CategoryColumn, QuantityColumn
FROM
(
SELECT CategoryColumn AS NameColumn, NULL AS CategoryColumn, NULL AS QuantityColumn,
CategoryColumn AS _cat, 1 AS _iscat
FROM myTable
GROUP BY CategoryColumn
UNION ALL
SELECT NameColumn, NULL AS CategoryColumn, QuantityColumn,
CategoryColumn AS _cat, 0 AS _iscat
FROM myTable
) x
ORDER BY _cat, _iscat DESC
答案 1 :(得分:0)
您可以,但除非您将元数据列添加到输出中,否则它将没有多大用处。
select NameColumn, CategoryColumn, QuantityColumn, 0 IsCategory
from tbl
union all
select distinct CategoryColumn, CategoryColumn, null, 1
from tbl
order by CategoryColumn, IsCategory desc, NameColumn;
当然,要获得您的EXACT输出订单,您可以省略和取消某些列,例如。
select NameColumn, NULL as CategoryColumn, QuantityColumn
from (
select NameColumn, CategoryColumn, QuantityColumn, 0 IsCategory
from tbl
union all
select distinct CategoryColumn, CategoryColumn, null, 1
from tbl
) X
order by X.CategoryColumn, IsCategory desc, NameColumn;
但是如果您打算使用SQL Server以外的数据,则需要保留元数据以将名称和类别与它们来自的原始类别相关联。 IsCategory对于识别从CategoryColumn中挑选的标题也很有用。