我的数据看起来像这样。
Select distinct
x.[PropertyBasics.PK Resnet Property ID], x.filname,
c.mv_30day_value '30 Day Value As Is',
c.mv_30day_repvalue '30 Day Value Repaired',
t.parcel 'Parcel#',x. *
from
Resnet_Reporting_ops.dbo.Ops_FullExportFLATV3 as X (NOLOCK)
left join
resnet_mysql.dbo.form_tax t (nolock) on x.[PropertyBasics.PK Resnet Property ID] = t.property_id
left join
resnet_mysql.dbo.form_fm c (nolock) on t.task_id = c.task_id
where
X.[PropertyBasics.Property Basics - ResID] = 217
and x.[PropertyBasics.PK Resnet Property ID] = 1153829
如何让这些数据只显示Parcel#的1条记录?
答案 0 :(得分:0)
select distinct
测试整个行以查看它是否是唯一的。任何列中最小的差异都会使行“不同”。以下2个值不同,因此将导致2行
并且以下2个值对不同,这会导致另外2行:
所有组合成4行。
因此,看起来我们可以从上面的数据项2中删除破折号,这将使它与数据项1相等。
replace(t.parcel,'-','') AS [Parcel#]
但这总是如此吗?在此处未显示的其他行中是否存在其他差异?
我们如何决定值对3.或4.? MAX()
无效。例如
MAX(c.mv_30day_value), MAX(c.mv_30day_repvalue)
会产生
500000 8500000
并且源数据中不存在该组合
达到预期结果所需的逻辑没有明确定义。
尝试以下方法:
SELECT
x.[PropertyBasics.PK Resnet Property ID]
, x.filname
, MAX(c.mv_30day_value) "30 Day Value As Is"
, MAX(c.mv_30day_repvalue) "30 Day Value Repaired"
, replace(t.parcel,'-','') "Parcel#"
-- , x.* NO WAY !!
FROM Resnet_Reporting_ops.dbo.Ops_FullExportFLATV3 AS X
LEFT JOIN resnet_mysql.dbo.form_tax t ON x.[PropertyBasics.PK Resnet Property ID] = t.property_id
LEFT JOIN resnet_mysql.dbo.form_fm c ON t.task_id = c.task_id
WHERE X.[PropertyBasics.Property Basics - ResID] = 217
AND x.[PropertyBasics.PK Resnet Property ID] = 1153829
GROUP BY
x.[PropertyBasics.PK Resnet Property ID]
, x.filname
, replace(t.parcel,'-','')
;
请注意。对于GROUP BY,x.*
不可行,因为您需要指定列将定义每个唯一行。对于每个额外的输出列,x.*
与“select distinct”相反也会产生效果,增加了更多行的可能性。 (即通常更多列=更多差异=更多行)。同样如上所述,怀疑MAX()在这里产生了良好的结果。