【发布时间】:2021-03-23 18:32:13
【问题描述】:
ReportDateTime EuId1 EuId2
2020-02-01 1:00 1576 Null
2020-02-01 1:00 Null 1579
2020-02-01 2:00 Null 1573
2020-02-01 2:00 1566 Null
这就是我所拥有的,这就是我想要的……
ReportDateTime EuId1 EuId2
2020-02-01 1:00 1576 1579
2020-02-01 2:00 1566 1573
这是我的代码...
;WITH cteEq AS (
SELECT e.EntHID, e.EntCode, e.EntName
FROM cfEntity fac (NOLOCK)
JOIN cfEntityRelation er (NOLOCK) ON fac.EntHID = er.EntParentHID AND er.EntRelEffEnd = '12/31/2078'
JOIN cfEntity e (NOLOCK) ON er.EntChildHID = e.EntHID AND e.EntTypeTID = -200020
WHERE e.EntHID IN (SELECT ea.EaHID FROM cfEntityAttribute ea (NOLOCK) WHERE ea.EaKey = 'AirPermitXref_Diesel')
)
SELECT
ReportDateTime = a.EqReportDate
, EuId1 = CASE
WHEN EntName LIKE '%EU1%' THEN a.EqPwr
END
, EuId2 = CASE
WHEN EntName LIKE '%EU2%' THEN a.EqPwr
END
FROM eqHourlyAir a (NOLOCK)
JOIN cteEq e (NOLOCK) ON a.EqHID = e.EntHID
OUTER APPLY (
SELECT ad.EqHID, ad.EqReportDate, ad.EqRunTime
FROM eqHourlyAir ad (NOLOCK)
LEFT JOIN cfEntityAttribute ea (NOLOCK) ON ad.EqHID = CAST(ea.EaValue AS INT) AND ea.EaKey = 'AirPermitXref_DWI'
WHERE ea.EaHID = a.EqHID
AND ad.EqReportDate = a.EqReportDate
) dwi
OUTER APPLY (
SELECT ad.EqHID, ad.EqReportDate, ad.EqRunTime
FROM eqHourlyAir ad (NOLOCK)
LEFT JOIN cfEntityAttribute ea (NOLOCK) ON ad.EqHID = CAST(ea.EaValue AS INT) AND ea.EaKey = 'AirPermitXref_Diesel'
WHERE ea.EaHID = a.EqHID
AND ad.EqReportDate = a.EqReportDate
) dsl
WHERE CAST(a.EqReportDate AS DATE) >= @StartDate AND CAST(a.EqReportDate AS DATE) <= @EndDate
ORDER BY a.EqReportDate
【问题讨论】:
-
你为什么要发送垃圾邮件
NOLOCK,你确实明白它的作用和它的严重影响,对吧?如果您真的需要针对每个表查询提示(最重要的提示,您不需要),那么您应该在开始时设置隔离级别,将NOLOCK转储到任何地方。 -
请分享完整的示例数据以便更好地理解,并请说明您在使用此代码时遇到的困难。
-
如果您必须使用 nolock,了解后果,并准备处理错误或不正确的数据,那么至少使用当前语法而不是弃用的语法。
-
另外,一个讨厌的人,the semicolon (
;) is a statement terminator不是一个“初学者”。它位于 所有 语句的 end 处,而不是需要正确终止 previous 语句的语句的开头。
标签: sql sql-server tsql merge row