欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

mssql中将两列按先后显示在同一列(不是字符串的联接)

更新时间: 2014-01-05 02:17:53 责任编辑: Author_N1

 

MSSQL中将两列按先后显示在同一列(不是字符串的连接)
要求:有一个表Test,字段分别为ID(主键) name, need, had
现只需查询name、need、had ,并将 need 和 had 显示在同一列中,且同一个name必须显示在一起,对同一个name必须第一行显示其need 第二行显示其 had
举例
原表为:
ID name need had
-- ---- ---- ----
1  刘一 1000 900
2  陈二 2000 1680
3  张三  900 1440
4  李四 1800 2500
5  王五 1550 1350
6  赵六 1240 1000
7  孙七 1530 1530
8  周八  900 950
9  吴九 3570 3320
10 郑十 1730 2000
......

结果:
刘一 1000 
刘一 900
陈二 2000
陈二 1680
张三 900
张三 1440
李四 1800
李四 2500
......

目前存在的问题是:
sql语句:select name,数量 from (select ID, name,need as 数量 from test union all select ID, name,had from test) t order by ID
显示出来的结果中,某些name并不是都先显示need的数据,再显示had的数据,而是会反过来。
如下,刘一和陈二是先显示had的数据,再来显示need的数据。

刘一 900
刘一 1000
陈二 1680
陈二 2000
张三 900
张三 1440
李四 1800
李四 2500
......
--参考方法--
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-12-24 16:48:06
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
go 
create table [test]([ID] int,[name] varchar(4),[need] int,[had] int)
insert [test]
select 1,'刘一',1000,900 union all
select 2,'陈二',2000,1680 union all
select 3,'张三',900,1440 union all
select 4,'李四',1800,2500 union all
select 5,'王五',1550,1350 union all
select 6,'赵六',1240,1000 union all
select 7,'孙七',1530,1530 union all
select 8,'周八',900,950 union all
select 9,'吴九',3570,3320 union all
select 10,'郑十',1730,2000
--------------开始查询--------------------------



select name,数量 from (select ID, name,need as 数量,1 oid from test union all select ID, name,had,2 ord from test) t order by ID,oid
----------------结果----------------------------
/* 
name 数量
---- -----------
刘一   1000
刘一   900
陈二   2000
陈二   1680
张三   900
张三   1440
李四   1800
李四   2500
王五   1550
王五   1350
赵六   1240
赵六   1000
孙七   1530
孙七   1530
周八   900
周八   950
吴九   3570
吴九   3320
郑十   1730
郑十   2000
*/

--参考方法--


select name,need from (
select id,1 as px,name,need from ta1
union all
select id,2 as px,name,had from ta1
)t
order by id,px


name need
---- -----------
刘一   1000
刘一   900
陈二   2000
陈二   1680
张三   900
张三   1440
李四   1800
李四   2500
王五   1550
王五   1350
赵六   1240
赵六   1000
孙七   1530
孙七   1530
周八   900
周八   950
吴九   3570
吴九   3320
郑十   1730
郑十   2000

(20 行受影响)
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:53
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8157/
本文WWW.DOC100.NET DOC100.NET版权所有。