一个表的统计,不复杂,急救啊!在线等!

wangxiaofeiwuqiao 2010-11-25 11:33:59
一个表,字段数据如下:

REF_CODE QTY ITEM_CODE DES TRX_CODE INDATE QUANTITY FREEGOODS
PO216-3077 5300 82-00010 塑胶A TR2037147 2006-9-22 5300 N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 10200 N
PO216-3588 5500 82-00010 塑胶A TR2038495 2006-11-04 660 N
PO216-3588 5500 82-00010 塑胶A TR2038418 2006-11-02 2700 N
PO216-3588 5500 82-00010 塑胶A TR2038494 2006-11-09 2140 N
......


我想要变为如下格式:

REF_CODE QTY ITEM_CODE DES TRX_CODE INDATE QUANTITY FREEGOODS
PO216-3077 5300 82-00010 塑胶A TR2037147 2006-9-22 5300 N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 10200 N
PO216-3588 5500 82-00010 塑胶A TR2038495 2006-11-04 660 N
82-00010 塑胶A TR2038418 2006-11-02 2700 N
82-00010 塑胶A TR2038494 2006-11-09 2140 N
......

要求1:
有多个的REF_CODE只显示一个,比如PO216-3588,它的总数量是5500,只需要显示一个就行了,后面的详细数量660,2700,2140要显示出来。
要求2:输入ITEM_CODE可以查询相关的数据。比如输入82-00010,就能查找到该ITEM_CODE的所有记录。
数据库环境:sql server 2000

...全文
221 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2010-11-25
  • 打赏
  • 举报
回复
create table tb(REF_CODE nvarchar(20),QTY nvarchar(10),ITEM_CODE nvarchar(10),[DES] nvarchar(10),TRX_CODE nvarchar(10),INDATE datetime,QUANTITY int,FREEGOODS nvarchar(10))
insert into tb select 'PO216-3077','5300','82-00010','塑胶A','TR2037147','2006-9-22',5300,'N'
insert into tb select 'PO216-3185','10200','82-00010','塑胶A','TR2037750','2006-10-13',10200,'N'
insert into tb select 'PO216-3588','5500','82-00010','塑胶A','TR2038495','2006-11-04',660,'N'
insert into tb select 'PO216-3588','5500','82-00010','塑胶A','TR2038418','2006-11-02',2700,'N'
insert into tb select 'PO216-3588','5500','82-00010','塑胶A','TR2038494','2006-11-09',2140,'N'
go
select (case when ranknum=1 then REF_CODE else '' end) as REF_CODE,
(case when ranknum=1 then QTY else '' end) as QTY,
(case when ranknum=1 then ITEM_CODE else '' end) as ITEM_CODE,
(case when ranknum=1 then [DES] else '' end) as [DES],
TRX_CODE,INDATE,QUANTITY,FREEGOODS
FROM(
select rank() over(partition by REF_CODE order by QUANTITY)as ranknum,* from tb
)T
go
drop table tb
/*
REF_CODE QTY ITEM_CODE DES TRX_CODE INDATE QUANTITY FREEGOODS
-------------------- ---------- ---------- ---------- ---------- ----------------------- ----------- ----------
PO216-3077 5300 82-00010 塑胶A TR2037147 2006-09-22 00:00:00.000 5300 N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 00:00:00.000 10200 N
PO216-3588 5500 82-00010 塑胶A TR2038495 2006-11-04 00:00:00.000 660 N
TR2038494 2006-11-09 00:00:00.000 2140 N
TR2038418 2006-11-02 00:00:00.000 2700 N

(5 行受影响)
/*
-晴天 2010-11-25
  • 打赏
  • 举报
回复
create table tb(REF_CODE nvarchar(20),QTY nvarchar(10),ITEM_CODE nvarchar(10),[DES] nvarchar(10),TRX_CODE nvarchar(10),INDATE datetime,QUANTITY int,FREEGOODS nvarchar(10))
insert into tb select 'PO216-3077','5300','82-00010','塑胶A','TR2037147','2006-9-22',5300,'N'
insert into tb select 'PO216-3185','10200','82-00010','塑胶A','TR2037750','2006-10-13',10200,'N'
insert into tb select 'PO216-3588','5500','82-00010','塑胶A','TR2038495','2006-11-04',660,'N'
insert into tb select 'PO216-3588','5500','82-00010','塑胶A','TR2038418','2006-11-02',2700,'N'
insert into tb select 'PO216-3588','5500','82-00010','塑胶A','TR2038494','2006-11-09',2140,'N'
go
select (case when ranknum=1 then REF_CODE else '' end) as REF_CODE,
(case when ranknum=1 then QTY else '' end) as QTY,
(case when ranknum=1 then ITEM_CODE else '' end) as ITEM_CODE,
[DES],TRX_CODE,INDATE,QUANTITY,FREEGOODS
FROM(
select rank() over(partition by REF_CODE order by QUANTITY)as ranknum,* from tb
)T
go
drop table tb
/*
REF_CODE QTY ITEM_CODE DES TRX_CODE INDATE QUANTITY FREEGOODS
-------------------- ---------- ---------- ---------- ---------- ----------------------- ----------- ----------
PO216-3077 5300 82-00010 塑胶A TR2037147 2006-09-22 00:00:00.000 5300 N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 00:00:00.000 10200 N
PO216-3588 5500 82-00010 塑胶A TR2038495 2006-11-04 00:00:00.000 660 N
塑胶A TR2038494 2006-11-09 00:00:00.000 2140 N
塑胶A TR2038418 2006-11-02 00:00:00.000 2700 N

(5 行受影响)

*/
水族杰纶 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 js_szy 的回复:]
抓住一个抢分的
[/Quote]
抢点分押宝糊口啊
华夏小卒 2010-11-25
  • 打赏
  • 举报
回复
抓住一个抢分的
水族杰纶 2010-11-25
  • 打赏
  • 举报
回复
ITEM_CODE
DES
自己照写吧
水族杰纶 2010-11-25
  • 打赏
  • 举报
回复
if not object_id('tb') is null
drop table tb
Go
Create table tb([REF_CODE] nvarchar(10),[QTY] int,[ITEM_CODE] nvarchar(8),[DES] nvarchar(3),[TRX_CODE] nvarchar(9),[INDATE] Datetime,[QUANTITY] int,[FREEGOODS] nvarchar(1))
Insert tb
select N'PO216-3077',5300,N'82-00010',N'塑胶A',N'TR2037147','2006-9-22',5300,N'N' union all
select N'PO216-3185',10200,N'82-00010',N'塑胶A',N'TR2037750','2006-10-13',10200,N'N' union all
select N'PO216-3588',5500,N'82-00010',N'塑胶A',N'TR2038495','2006-11-04',660,N'N' union all
select N'PO216-3588',5500,N'82-00010',N'塑胶A',N'TR2038418','2006-11-02',2700,N'N' union all
select N'PO216-3588',5500,N'82-00010',N'塑胶A',N'TR2038494','2006-11-09',2140,N'N'
Go
--2000加个自增列
alter table tb
add id int identity
go
select [REF_CODE]=case when exists(select 1
from tb
where [REF_CODE]=t.[REF_CODE] and id>t.id)
then '' else [REF_CODE] end,
[QTY]=case when exists(select 1
from tb
where [REF_CODE]=t.[REF_CODE] and id>t.id)
then null else [QTY] end,
[ITEM_CODE],
[DES],
[TRX_CODE],
[INDATE] ,
[QUANTITY],
[FREEGOODS]
from tb t
go
alter table tb
drop column ID
go
---2005
;with tt
as
(select ID=row_number()over(order by getdate()),
* from tb)
select [REF_CODE]=case when exists(select 1
from tt
where [REF_CODE]=t.[REF_CODE] and id>t.id)
then '' else [REF_CODE] end,
[QTY]=case when exists(select 1
from tt
where [REF_CODE]=t.[REF_CODE] and id>t.id)
then null else [QTY] end,
[ITEM_CODE],
[DES],
[TRX_CODE],
[INDATE] ,
[QUANTITY],
[FREEGOODS]
from tt t
go
/*
REF_CODE QTY ITEM_CODE DES TRX_CODE INDATE QUANTITY FREEGOODS
---------- ----------- --------- ---- --------- ----------------------- ----------- ---------
PO216-3077 5300 82-00010 塑胶A TR2037147 2006-09-22 00:00:00.000 5300 N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 00:00:00.000 10200 N
NULL 82-00010 塑胶A TR2038495 2006-11-04 00:00:00.000 660 N
NULL 82-00010 塑胶A TR2038418 2006-11-02 00:00:00.000 2700 N
PO216-3588 5500 82-00010 塑胶A TR2038494 2006-11-09 00:00:00.000 2140 N
*/
华夏小卒 2010-11-25
  • 打赏
  • 举报
回复
有其他的递增字段吗?
hello926 2010-11-25
  • 打赏
  • 举报
回复
PO216-3077	5300	82-00010	塑胶A	TR2037147	2006-09-22 00:00:00.000	5300	N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 00:00:00.000 10200 N
PO216-3588 5500 82-00010 塑胶A TR2038495 2006-11-04 00:00:00.000 660 N
0 TR2038418 2006-11-02 00:00:00.000 2700 N
0 TR2038494 2006-11-09 00:00:00.000 2140 N
hello926 2010-11-25
  • 打赏
  • 举报
回复
WITH T AS(SELECT *,ID=ROW_NUMBER() OVER(PARTITION BY REF_CODE ORDER BY QTY) FROM A)
SELECT REF_CODE=CASE WHEN ID=1 THEN REF_CODE ELSE ''END,
QTY=CASE WHEN ID=1 THEN QTY ELSE '' END,
ITEM_CODE=CASE WHEN ID=1 THEN ITEM_CODE ELSE '' END,
DES=CASE WHEN ID=1 THEN DES ELSE '' END,TRX_CODE,INDATE,QUANTITY,FREEGOODS FROM T


hello926 2010-11-25
  • 打赏
  • 举报
回复
0
0
是第二列的,
后面的列依次类推。
wangxiaofeiwuqiao 2010-11-25
  • 打赏
  • 举报
回复
感谢楼上的, 要求结果稍做修改,如下:
不好意思

REF_CODE QTY ITEM_CODE DES TRX_CODE INDATE QUANTITY FREEGOODS
PO216-3077 5300 82-00010 塑胶A TR2037147 2006-9-22 5300 N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 10200 N
PO216-3588 5500 82-00010 塑胶A TR2038495 2006-11-04 660 N
TR2038418 2006-11-02 2700 N
TR2038494 2006-11-09 2140 N
hello926 2010-11-25
  • 打赏
  • 举报
回复
PO216-3077	5300	82-00010	塑胶A	TR2037147	2006-09-22 00:00:00.000	5300	N
PO216-3185 10200 82-00010 塑胶A TR2037750 2006-10-13 00:00:00.000 10200 N
PO216-3588 5500 82-00010 塑胶A TR2038495 2006-11-04 00:00:00.000 660 N
0 82-00010 塑胶A TR2038418 2006-11-02 00:00:00.000 2700 N
0 82-00010 塑胶A TR2038494 2006-11-09 00:00:00.000 2140 N
hello926 2010-11-25
  • 打赏
  • 举报
回复
CREATE TABLE A(REF_CODE VARCHAR(10),QTY INT,ITEM_CODE  VARCHAR(10),
DES NVARCHAR(10),TRX_CODE VARCHAR(10),INDATE DATETIME,QUANTITY INT,FREEGOODS VARCHAR(2))
INSERT INTO A
SELECT 'PO216-3077' , 5300 , '82-00010' , N'塑胶A' , 'TR2037147' , '2006-9-22' , 5300 , 'N' UNION ALL
SELECT 'PO216-3185' , 10200 , '82-00010' , N'塑胶A' , 'TR2037750' , '2006-10-13' , 10200 , 'N' UNION ALL
SELECT 'PO216-3588' , 5500 , '82-00010' , N'塑胶A' , 'TR2038495' , '2006-11-04' , 660 , 'N' UNION ALL
SELECT 'PO216-3588' , 5500 , '82-00010' , N'塑胶A' , 'TR2038418' , '2006-11-02' , 2700 , 'N' UNION ALL
SELECT 'PO216-3588' , 5500 , '82-00010' , N'塑胶A', 'TR2038494' , '2006-11-09' , 2140 , 'N'


GO

WITH T AS(SELECT *,ID=ROW_NUMBER() OVER(PARTITION BY REF_CODE ORDER BY QTY) FROM A)
SELECT REF_CODE=CASE WHEN ID=1 THEN REF_CODE ELSE ''END,
QTY=CASE WHEN ID=1 THEN QTY ELSE '' END,ITEM_CODE,DES,TRX_CODE,INDATE,QUANTITY,FREEGOODS FROM T

wangxiaofeiwuqiao 2010-11-25
  • 打赏
  • 举报
回复
性能不是问题,那位大哥帮看看。
wangxiaofeiwuqiao 2010-11-25
  • 打赏
  • 举报
回复
我要用sql语句哦。
wangxiaofeiwuqiao 2010-11-25
  • 打赏
  • 举报
回复
我不知道,报表的展开我不会而且时间来不及。
帮看看吧, sql语句应该可以做到。
zxjnew 2010-11-25
  • 打赏
  • 举报
回复
这个数据层来处理的话降低了性能,本来就应该由业务层来进行处理。由应用程序进行判断,网上各种报表控件都支持这类功能。
hao1hao2hao3 2010-11-25
  • 打赏
  • 举报
回复
这...

这应该是交给应用程序去做吧?报表的展开功能而已,数据源不用处理成这个样式的。
wangxiaofeiwuqiao 2010-11-25
  • 打赏
  • 举报
回复
wangxiaofeiwuqiao 2010-11-25
  • 打赏
  • 举报
回复
19楼的排序还不行哦,显示数据好像有问题,17,18楼的rank()在2000下没法使用, 10楼的怎么测试的时候出错,说as附件有语法错误呢,急啊
加载更多回复(2)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧