获取一次重复记录(SQL)

时间:2015-03-03 17:40:56

标签: sql

SELECT DISTINCT A.LeaseID, 
                C.SerialNumber, 
                B.LeasedProjectNumber As 'ProjectNumber', 
                A.LeaseComment As 'LeaseContractComments'
FROM aLease A
LEFT OUTER JOIN aLeasedAsset B
ON a.LeaseID = B.LeaseID
LEFT OUTER JOIN aAsset C
ON B.LeasedProjectNumber = C.ProjectNumber AND B.PartID = C.aPartid
WHERE A.LeaseComment IS NOT NULL

enter image description here

我从查询语句中得到了这个结果。但我不想重复第二栏中3条记录的最后一栏(评论)。

我希望第二列的值在重复注释后写入。像小组一样

2 个答案:

答案 0 :(得分:0)

好吧,我会捅这个。目前还不清楚你究竟希望得到什么,但阅读你的评论,听起来你正想在你的桌子上建立各种各样的等级。

这样的事情:

"Lease Terminated Jan 29, 2013 due to the event of..."
    216    24914   87
    216    724992  87
    216    724993  87
"Other potential column"
    217    2132    86
    ...
...

不幸的是,我不相信这是可能的。 SQL Server对返回一个表非常严格,根据定义,这是一个二维的表。在SQL中描述诸如此类的层次结构没有好方法。 hierarchyid类型,但这并不重要。

鉴于此,您实际上只有两个选择:

  1. 我的偏好99%的时间,只接受重复项。稍后在您的程序代码中处理它们,这可能 支持这些树。除非你正在处理性能危急情况,或者你正在撤回大量数据(或者很长时间的评论),否则这应该是完全正常的。

  2. 如果您希望直接将此结果打印给用户,或者网络性能是一个大问题,会将您的列汇总到每个评论的单个记录中。很好 - 已知您不能在同一列中包含多个值,原因与上面列出的结果不可能相同。但是,您可以做的事情,数据和您自己的偏好允许,write an aggregate function to concatenate the grouped results into a single, comma-delimited column

    然而,你可能不得不解析这些逗号,所以除非网络流量是你最关心的问题,否则我真的只是在程序方面这样做。

答案 1 :(得分:0)

SELECT STUFF((SELECT DISTINCT ', ' + SerialNumber
          FROM [vLeasedAsset]
          WHERE A.LeaseID = LeaseID AND A.ProjectNumber = ProjectNumber
          FOR XML PATH (''))
          , 1, 1, '') AS SerialNumber, [ProjectNumber], 
          MAX(ContractComment) 'LeaseContractComment'               
  FROM [vLeasedAsset] A
  WHERE ContractComment != ''
  GROUP BY [ProjectNumber], LeaseID

输出:

SerialNumber

24914,724993

23401,720356

ProjectNumber

87

91