作者RichFU (小富哥~~~)
看板Database
标题Re: [SQL ] 请问join後如何不显示重复的资料
时间Sat Jun 12 10:18:19 2010
※ 引述《rookie (rookie)》之铭言:
: 您好
: 我使用的是MS SQL 2005
: 想请教二个SQL的问题,谢谢
: 1、显示不重复的资料可以使用DISTINCT,
: 但如何找出资料重复的部份呢?
: 2、
: ASTMB TABLE
: MB001 资产编号
: MB002 资产名称
: MB003 资产规格
: MB012 数量
: ASTMC table
: MC001 资产编号
: MC002 部门代号
: MC003 保管人
: CMSME table
: ME001 部门代号
: ME002 部门名称
: CMSMV table
: MV001 员工代号
: MV002 姓名
: select MB001, MB002,MB003,MC.MC002,ME.ME002,MC.MC003,MB016
: from ASTMB MB LEFT JOIN ASTMC MC ON MB.MB001=MC.MC001
: LEFT JOIN CMSMV MV ON MC.MC003=MV.MV001
: LEFT JOIN CMSME ME ON MC.MC002=ME.ME001
: WHERE MB012>0
: 因同一资产数量若大於1,则有可能有多个不同的「保管人」
: 导致在ASTMB MB LEFT JOIN ASTMC MC ON MB.MB001=MC.MC001
: 时会同一资产会重复显示?
: 我只想要让资产编号出现一次,请问如何解决呢?谢谢
您好,我不会MS SQL,提供个想法来讨论,我想MSSQL应该是做的出来的。
我在ORACLE上是可以办到的。
(1)将您上述SQL依「资产编号」 GROUP BY 再产生另一栏位,并依
此进行群组内编号,如下例:
群组内编号 资产编号 资产名称 部门代号 部门名称 姓名 数量
1 P1 A D1 X I 2
2 P1 A D1 X J 2
3 P1 A D2 Y K 2
1 P2 B D1 X I 1
1 P3 C D1 X J 2
2 P3 C D3 Z L 2
1 P4 D D1 X I 2
2 P4 D D2 Y J 2
3 P4 D D3 Z L 2
(2)再依「群组内编号」栏位判断「资产编号」与「资产名称」是否呈现
IF 群组内编号 > 1 THEN 资产编号、资产名称 设为 NULL
如下例:
群组内编号 资产编号 资产名称 部门代号 部门名称 姓名 数量
1 P1 A D1 X I 2
2 D1 X J 2
3 D2 Y K 2
1 P2 B D1 X I 1
1 P3 C D1 X J 2
2 D3 Z L 2
1 P4 D D1 X I 2
2 D2 Y J 2
3 D3 Z L 2
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.240.166.92