再谈 Sql 两行变一行 实例

来源:互联网 发布:学c语言编程有什么用 编辑:程序博客网 时间:2024/05/17 08:49

要求: 按 lct1, lct2  排序后的前两条纪录,显示为下列结果:

 

item_cd1   item_cd2            lct

01             a                 A01-3  B01-1

 

 

建表准备:

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'm_lct_service')
DROP TABLE m_lct_service
GO

CREATE TABLE m_lct_service (
 item_cd1 nvarchar(5)  NOT NULL 

 ,item_cd2 nvarchar(10)  NOT NULL 

 ,seq_no  int   NOT NULL 

 ,lct1  nvarchar(3)  NOT NULL 

 ,lct2  nvarchar(3)  NOT NULL 

 ,stk_qty numeric(15,4) 

 ,ins_emp_cd nvarchar(4)  NOT NULL 
 ,ins_date datetime  NOT NULL 

 ,upd_emp_cd nvarchar(4)  NOT NULL 
 ,upd_date datetime  NOT NULL 

 ,CONSTRAINT pk_m_lct_service PRIMARY KEY (
    item_cd1
    ,item_cd2
    ,seq_no
    ,lct1
    ,lct2
    )
)

GO

 

数据准备:

item_cd1 item_cd2 seq_no lct1 lct2 stk_qty ins_emp_cd ins_date upd_emp_cd upd_date
01 a 1 A01 3 20.0000 fan 2010-01-02 00:00:00.000 fan 2010-01-02 00:00:00.000
01 a 2 B01 1 20.0000 fan 2010-01-02 00:00:00.000 fan 2010-01-02 00:00:00.000
01 a 3 B01 4 20.0000 fan 2010-01-02 00:00:00.000 fan 2010-01-02 00:00:00.000

 

实际Sql:

 

select item_cd1,item_cd2,

case  when (AA <> BB)
then AA + ' ' + BB
else AA
end as lct
from(

select item_cd1,item_cd2,min(lct) as AA,max(lct) as BB
from (select top 2 item_cd1, item_cd2,(lct1 + '-' + lct2) as lct from m_lct_service order by lct1 asc, lct2 asc) as t
group by item_cd1,item_cd2
) as t1

 

原创粉丝点击