我有一个表,其中包含以下列和值
ID TYPE NAME
1 MAJOR RAM
2 MAJOR SHYAM
3 MAJOR BHOLE
4 MAJOR NATHA
5 MINOR JOHN
6 MINOR SMITH
我的要求是纠正一个存储过程(或 SQL 查询),它会返回相同的结果集,只是在 TYPE 从一种类型更改为另一种类型(主要、次要)后会有空行。
MAJOR RAM
MAJOR SHYAM
MAJOR BHOLE
MAJOR NATHA
MINOR JOHN
MINOR SMITH
虽然我使用此查询添加空行,但它不是按 ID 排序的
select TYPE, NAME from (
select
TYPE as P1,
1 as P2,
ID,
TYPE,
NAME
from EMP
union all
select distinct
TYPE,
2,
'',
'',
N''
from EMP
) Report
order by P1, P2
go
我如何按 ID 对数据进行排序
提前致谢
最佳答案
是的,是的,不要这样做,但这里是执行此操作的查询,假设是 SQL Server 2008 R2。其他版本/rdbms 您可以通过编写两个单独的查询并在一起来实现相同的功能。
询问
; WITH DEMO (id, [type], [name]) AS
(
SELECT 1,'MAJOR','RAM'
UNION ALL SELECT 2,'MAJOR','SHYAM'
UNION ALL SELECT 3,'MAJOR','BHOLE'
UNION ALL SELECT 4,'MAJOR','NATHA'
UNION ALL SELECT 5,'MINOR','JOHN'
UNION ALL SELECT 6,'MINOR','SMITH'
)
, GROUPED AS
(
SELECT
D.[type]
, D.[name]
, ROW_NUMBER() OVER (ORDER BY D.[type] ASC, D.[name] DESC) AS order_key
FROM
DEMO D
GROUP BY
--grouping sets introduced with SQL Server 2008 R2
-- http://msdn.microsoft.com/en-us/library/bb510427.aspx
GROUPING SETS
(
[type]
, ([type], [name])
)
)
SELECT
CASE WHEN G.[name] IS NULL THEN NULL ELSE G.[type] END AS [type]
, G.[name]
FROM
GROUPED G
ORDER BY
G.order_key
结果
如果您不喜欢空值,请使用coalsece 制作空字符串
type name
MAJOR SHYAM
MAJOR RAM
MAJOR NATHA
MAJOR BHOLE
NULL NULL
MINOR SMITH
MINOR JOHN
NULL NULL
关于sql - 在行组之间插入空白行并在sql中按ID排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7517190/