sql怎么实现:某一列的相同的情况就只显示一行,其他列照常显示?

比如:
id count

1111 2222

3333 4444

5555 6666

我的sql:
CREATE VIEW dbo.View_select2
AS
SELECT e.planID,e.PlanCode, CASE WHEN c.smzt1 = 1 AND
c.smzt1date IS NOT NULL AND smzt1date <> '' THEN '已结束声明' WHEN c.smzt1 IS NULL OR
smzt1 = '' THEN '检查中' END AS [SMZT1], CASE WHEN b.taskid IN
(SELECT taskid
FROM firstchecktbl) THEN
(SELECT taskcode
FROM firstchecktbl
WHERE taskid = b.taskid) WHEN b.taskid IN
(SELECT taskid
FROM tasktbl) THEN
(SELECT taskcode
FROM tasktbl
WHERE taskid = b.taskid) END taskcode, a.factorycode AS factorycode, a.factoryname AS factoryname, d .levelmanage AS levelmanage, a.sqfpdwdz AS sqfpdwdz,
a.qfrq AS qfrq,
/*-检查日期以收费单签发日期代替,*/ (SELECT innerusername
FROM (SELECT taskid, innerusername = stuff
((SELECT ',' + isnull(innerusername, '')
FROM t_auditor
WHERE taskid = t .taskid AND groupleader_yn = 'yes' FOR xml path('')), 1, 1, '')
FROM t_auditor t
GROUP BY taskid) b
WHERE b.taskid = c.planid) AS innerusernameZZ,
(SELECT innerusername
FROM (SELECT taskid, innerusername = stuff
((SELECT ',' + isnull(innerusername, '')
FROM t_auditor
WHERE taskid = t .taskid AND groupleader_yn = 'no' FOR xml path('')), 1, 1, '')
FROM t_auditor t
GROUP BY taskid) b
WHERE b.taskid = c.planid) AS innerusernameZY, a.sqfpdwmc AS sqfpdwmc, /*-收取发票单位名称*/ a.sqfprxm AS sqfprxm, a.sqfprdh AS sqfprdh, a.jcf AS jcf,
a.nj AS nj, CONVERT(int, jcf) + CONVERT(int, nj) AS total, a.memo AS memo, e.yszkqr AS yszkqr
FROM t_costinfo a, t_costinfotask b, t_checkinfo c,
(SELECT fcodea, levelmanage
FROM t_factory
WHERE fcodea IS NOT NULL
UNION
SELECT fcodev, levelmanage
FROM t_factory
WHERE fcodev IS NOT NULL) d, PlanTbl e
WHERE a.costid = b.costid AND b.taskid = c.taskid AND a.factorycode = d .fcodea AND c.PlanID = e.PlanID
UNION
SELECT z.planid,z.planid, CASE WHEN z.smzt1 = 1 AND z.smzt1date IS NOT NULL AND smzt1date <> '' THEN '已结束声明' WHEN z.smzt1 IS NULL OR
smzt1 = '' THEN '检查中' END AS [SMZT1], z.taskcode AS taskcode, substring(z.taskcode, 6, 7) AS factorycode, CASE checktype WHEN 1 THEN
(SELECT factoryname
FROM firstchecktbl
WHERE taskid = z.taskid) WHEN 2 THEN
(SELECT factoryname
FROM plantbl
WHERE planid = z.planid) END factoryname, CASE WHEN substring(z.taskcode, 6, 1) = 'A' THEN
(SELECT max(levelmanage)
FROM t_factory
WHERE fcodea IS NOT NULL AND fcodea <> '' AND fcodea = substring(z.taskcode, 6, 7)) WHEN substring(z.taskcode, 6, 1) = 'V' THEN
(SELECT max(levelmanage)
FROM t_factory
WHERE fcodev IS NOT NULL AND fcodev <> '' AND fcodev = substring(z.taskcode, 6, 7)) END levelmanage, NULL, NULL,
(SELECT innerusername
FROM (SELECT taskid, innerusername = stuff
((SELECT ',' + isnull(innerusername, '')
FROM t_auditor
WHERE taskid = t .taskid AND groupleader_yn = 'yes' FOR xml path('')), 1, 1, '')
FROM t_auditor t
GROUP BY taskid) y
WHERE y.taskid = z.planid) asinnerusernameZZ,
(SELECT innerusername
FROM (SELECT taskid, innerusername = stuff
((SELECT ',' + isnull(innerusername, '')
FROM t_auditor
WHERE taskid = t .taskid AND groupleader_yn = 'no' FOR xml path('')), 1, 1, '')
FROM t_auditor t
GROUP BY taskid) x
WHERE x.taskid = z.planid) AS innerusernameZY, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
FROM t_checkinfo z
WHERE taskid NOT IN
(SELECT taskid
FROM t_costinfotask)

我要实现的效果就是:如果plancode重复就只显示一行,然后其他列正常显示。
求解。

是两条元组所有字段都一样吗,如果只是消除要查询的字段重复的话,group by可以消除重复字段

SELECT DISTINCT plancode FROM TableName

图片说明
比如说上图中id=1和id=3的重复了,只需要显示一行的话就group by name,sex

分组显示就可以了,记得在需要分组的字段上面加索引

参考自:
MySQL如何优化GROUP BY http://www.data.5helpyou.com/article237.html

你可以将plancode 列进行分组,当count(plancode)>1 的时候(也就是说 有重复的数据) 你就只显示id 最大的那行,或者是最小(反正就只显示一个)
举个简单的例子:
select max(plancode) maxpp from test aa inner join test bb on aa.maxpp=bb.plancode group by aa.plancode

这样将我最大的plancode 拿出来,如果不重复,最大的也就只有一个。如果重复,其他的都过滤了,就只拿最大的出来

 - - 你们说的答案都不是我需要的。

去重复就可以了,可以根据name去重复,在name前加distinct。但是记住distinct要写在最前面。

你是想要这样的结果么?图片说明
貌似sql 不能满足你的要求!~~
不过你可以选出结果,然后自己写个简单的遍历,将数据组合成你想要的格式!~~

打个比方哈 表A
id name
1 张三
2 张三
3 李四
你的意思,结果是不是显示
id name
1 张三
3 李四
语句:

 select  a.*    from   A   as   a   inner    join    (select    b.name   as   name  from   B   as   b)  as   s  on   a.name=s.name

或者

select max(a.id),a.name from A as a group by a.name