sql - 在行组之间插入空白行并在sql中按ID排序

标签 sql

我有一个表,其中包含以下列和值

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/

相关文章:

mysql - SQL 从表中删除选定的行

mysql - SQL通过id从另一个表检索值并显示总计

mysql - 如何选择一个值然后更新字段

sql - 如何在 SQL 中进行 regexp_replace ?

sql - 让 mysql select 语句返回完全限定的列名,如 table.field

asp.net - 遇到除零错误

sql - 向 Json 数组添加新元素

sql - 脚本、存储过程、T-SQL、PL/SQL 之间的区别

mysql - 将 ON 与 WITH 子句结合使用的 DQL

mysql - 使用多个联接的未知列