一个消除重复的sql语句的问题

fzzhuxj 2004-04-29 05:40:41
品名 订货量 单数 规格 总订货量 开单人 总编号 开单时间 耗材要求到达时间
11 2 2 4 4 ee erer 2004-04-29 2004-04-29
11 2 344 dsadas 688 aa 100 2004-04-28 2004-04-28
11 3 3 4 9 ww www 2004-04-28 2004-04-28
11 3 4 dsadas 12 ee erer 2004-04-29 2004-04-29

我在品名为11的数据中想按规格相同的只显示第一条记录,例如上面的数据只显示

品名 订货量 单数 规格 总订货量 开单人 总编号 开单时间 耗材要求到达时间
11 2 2 4 4 ee erer 2004-04-29 2004-04-29
11 2 344 dsadas 688 aa 100 2004-04-28 2004-04-28

但是我用
select distinct 品名,订货量,单数,规格,总订货量,开单人,总编号,开单时间,耗材要求到达时间 from Project where 品名 = '11'
就会把4条记录都显示出来,我应该怎么做?
...全文
61 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-04-29
  • 打赏
  • 举报
回复
也就是说,在品名,规格相同的情况下,你必须有另一个字段不重复,这个字段我是选择总编号,如果是其他字段,就将总编号改成那个字段.

如果没有,就得用临时表.
netcoder 2004-04-29
  • 打赏
  • 举报
回复
如果总编号是不重复的,老邹的就可以用
fzzhuxj 2004-04-29
  • 打赏
  • 举报
回复
还有问一下,刚才你写的和总编号有关系,我提的要求是和总编号没有关系,总编号只是一个普通的字段,你上面的那个例子需要改动吗
netcoder 2004-04-29
  • 打赏
  • 举报
回复
怎么这么快
你做过打字员?
fzzhuxj 2004-04-29
  • 打赏
  • 举报
回复
你的sql语法很强啊,我一问你就搞定这个问题了啊
zjcxc 元老 2004-04-29
  • 打赏
  • 举报
回复
自己写的,那有工具.
netcoder 2004-04-29
  • 打赏
  • 举报
回复
你的这个测试例子怎么这么快就能好了?
是用工具的吗?
netcoder 2004-04-29
  • 打赏
  • 举报
回复
老邹问 你个问题好吗?
zjcxc 元老 2004-04-29
  • 打赏
  • 举报
回复
--测试

--测试数据
create table Project(品名 varchar(10),订货量 int,单数 int,规格 varchar(10),总订货量 int,开单人 varchar(10),总编号 varchar(10),开单时间 datetime,耗材要求到达时间 datetime)
insert Project select '11','2','2' ,'4' ,'4' ,'ee','erer','2004-04-29','2004-04-29'
union all select '11','2','344','dsadas','688','aa','100' ,'2004-04-28','2004-04-28'
union all select '11','3','3' ,'4' ,'9' ,'ww','www' ,'2004-04-28','2004-04-28'
union all select '11','3','4' ,'dsadas','12' ,'ee','erer','2004-04-29','2004-04-29'
go

--查询
select a.品名,a.订货量,a.单数,a.规格,a.总订货量,a.开单人,a.总编号,a.开单时间,a.耗材要求到达时间
from Project a join(
select 品名,规格,总编号=min(总编号)
from Project
where 品名='11'
group by 品名,规格
)b on a.品名=b.品名 and a.规格=b.规格 and a.总编号=b.总编号

--或者:
select 品名,订货量,单数,规格,总订货量,开单人,总编号,开单时间,耗材要求到达时间
from Project a
where 品名 = '11' and 总编号=(
select min(总编号) from Project where 品名=a.品名 and 规格=a.规格)
go

--删除测试
drop table Project

/*--测试结果

品名 订货量 单数 规格 总订货量 开单人 总编号 开单时间 耗材要求到达时间
---------- ----------- ----------- ---------- ----------- ---------- ---------- ------------------------------------------------------ ------------------------------------------------------
11 2 2 4 4 ee erer 2004-04-29 00:00:00.000 2004-04-29 00:00:00.000
11 2 344 dsadas 688 aa 100 2004-04-28 00:00:00.000 2004-04-28 00:00:00.000

(所影响的行数为 2 行)

品名 订货量 单数 规格 总订货量 开单人 总编号 开单时间 耗材要求到达时间
---------- ----------- ----------- ---------- ----------- ---------- ---------- ------------------------------------------------------ ------------------------------------------------------
11 2 2 4 4 ee erer 2004-04-29 00:00:00.000 2004-04-29 00:00:00.000
11 2 344 dsadas 688 aa 100 2004-04-28 00:00:00.000 2004-04-28 00:00:00.000

(所影响的行数为 2 行)

--*/
zjcxc 元老 2004-04-29
  • 打赏
  • 举报
回复

品名 订货量 单数 规格 总订货量 开单人 总编号 开单时间 耗材要求到达时间
---------- ----------- ----------- ---------- ----------- ---------- ---------- ------------------------------------------------------ ------------------------------------------------------
11 2 2 4 4 ee erer 2004-04-29 00:00:00.000 2004-04-29 00:00:00.000
11 2 344 dsadas 688 aa 100 2004-04-28 00:00:00.000 2004-04-28 00:00:00.000

(所影响的行数为 2 行)

品名 订货量 单数 规格 总订货量 开单人 总编号 开单时间 耗材要求到达时间
---------- ----------- ----------- ---------- ----------- ---------- ---------- ------------------------------------------------------ ------------------------------------------------------
11 2 2 4 4 ee erer 2004-04-29 00:00:00.000 2004-04-29 00:00:00.000
11 2 344 dsadas 688 aa 100 2004-04-28 00:00:00.000 2004-04-28 00:00:00.000

(所影响的行数为 2 行)
fzzhuxj 2004-04-29
  • 打赏
  • 举报
回复
总编号不考虑,只当作一个普通的字段,只要满足我说的要求就可以了,应该怎么改
netcoder 2004-04-29
  • 打赏
  • 举报
回复
select distinct 品名,订货量,单数,规格,总订货量,开单人,总编号,开单时间,耗材要求到达时间 from Project where 品名 = '11'

SELECT L.*
FROM Project L
JOIN Project R
ON L.品名 = R.品名 AND L.规格 = R.规格 AND L.耗材要求到达时间=max(R.耗材要求到达时间)
netcoder 2004-04-29
  • 打赏
  • 举报
回复
select distinct 品名,订货量,单数,规格,总订货量,开单人,总编号,开单时间,耗材要求到达时间 from Project where 品名 = '11'

SELECT L.*
FROM Project L
JOIN Project R
ON L.品名 = R.品名 AND L.规格 = R.规格 AND L.耗材要求到达时间>R.耗材要求到达时间
fzzhuxj 2004-04-29
  • 打赏
  • 举报
回复
第一个语法好像有点问题,第二个可以,谢谢了
zjcxc 元老 2004-04-29
  • 打赏
  • 举报
回复
--或者:
select 品名,订货量,单数,规格,总订货量,开单人,总编号,开单时间,耗材要求到达时间
from Project a
where 品名 = '11' and 总编号=(
select min(总编号) from Project where 品名=a.品名 and 规格=a.规格)
zjcxc 元老 2004-04-29
  • 打赏
  • 举报
回复
--总编号对于同一品名,规格是唯一的吧?

select a.品名,a.订货量,a.单数,a.规格,a.总订货量,a.开单人,a.总编号,a.开单时间,a.耗材要求到达时间
from Project a join(
select 品名,规格,总编号=min(总编号)
from Project
where 品名='11'
group by 品名,规格
)b on a.品名=b.品名 and a.规格=b.规格 and a.总编号=b.总编号

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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