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
我从查询语句中得到了这个结果。但我不想重复第二栏中3条记录的最后一栏(评论)。
我希望第二列的值在重复注释后写入。像小组一样
答案 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
类型,但这并不重要。
鉴于此,您实际上只有两个选择:
我的偏好99%的时间,只接受重复项。稍后在您的程序代码中处理它们,这可能 支持这些树。除非你正在处理性能危急情况,或者你正在撤回大量数据(或者很长时间的评论),否则这应该是完全正常的。
如果您希望直接将此结果打印给用户,或者网络性能是一个大问题,会将您的列汇总到每个评论的单个记录中。很好 - 已知您不能在同一列中包含多个值,原因与上面列出的结果不可能相同。但是,您可以做的事情,数据和您自己的偏好允许,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