一个SQL语句的变化过程
1 原始语句
SELECT C.ParentId,A.Area_DM, A.Airport_DM, (' ' + B.QC) AS AirportName,Sum(JCN) AS TotalJCN,
SUM(CR + ET + CRWH + ETWH) AS TotalLK, Sum(HW + YJ) AS TotalHY, Sort = 1
FROM AirportProduces_2006 A
LEFT JOIN Airports B ON A.Airport_DM = B.Airport_DM
LEFT JOIN Areas AS C ON C.Area_DM = A.Area_DM
LEFT JOIN HBXZ AS D ON A.HBXZ = D.CHAR_CODE
WHERE A.Produce_Date >= '2006-01-01' AND A.Produce_Date <= '2006-02-28'
AND D.CHAR_SORT = '运输'
AND (A.Area_DM = '51') GROUP BY A.Area_DM, A.Airport_DM, B.QC, C.ParentId,D.CHAR_SORT
2 变化要求:当Sum(JCN)的时候不考虑where条件中的D.CHAR_SORT
变化第一步:
SELECT C.ParentId,A.Area_DM, A.Airport_DM, (' ' + B.QC) AS AirportName,Sum(JCN) AS TotalJCN,
CASE WHEN D.CHAR_SORT = '运输' THEN SUM(CR + ET + CRWH + ETWH) ELSE 0 END AS TotalLK,
CASE WHEN D.CHAR_SORT = '运输' THEN Sum(HW + YJ) ELSE 0 END AS TotalHY, Sort = 1 INTO #TEMP
FROM AirportProduces_2006 A
LEFT JOIN Airports B ON A.Airport_DM = B.Airport_DM
LEFT JOIN Areas AS C ON C.Area_DM = A.Area_DM
LEFT JOIN HBXZ AS D ON A.HBXZ = D.CHAR_CODE
WHERE A.Produce_Date >= '2006-01-01' AND A.Produce_Date <= '2006-02-28'
AND (A.Area_DM = '51') GROUP BY A.Area_DM, A.Airport_DM, B.QC, C.ParentId,D.CHAR_SORT
SELECT ParentId,Area_DM,Airport_DM,AirportName,
SUM(TotalJCN) AS TotalJCN,SUM(TotalLK) AS TotalLK,SUM(TotalHY) AS TotalHY,Sort = 1 FROM #TEMP2
GROUP BY Area_DM, Airport_DM, ParentId, AirportName
这个步骤运用临时表 将结果放入临时表 然后再分组统计
2 演化步骤二
综合第一步,可以写出第二步,一条语句
SELECT ParentId,Area_DM,Airport_DM,AirportName,
SUM(TotalJCN) AS TotalJCN,SUM(TotalLK) AS TotalLK,SUM(TotalHY) AS TotalHY,Sort = 1 FROM (
SELECT C.ParentId,A.Area_DM, A.Airport_DM, (' ' + B.QC) AS AirportName,
Sum(JCN) AS TotalJCN,
CASE WHEN D.CHAR_SORT = '运输' THEN SUM(CR + ET + CRWH + ETWH) ELSE 0 END AS TotalLK,
CASE WHEN D.CHAR_SORT = '运输' THEN Sum(HW + YJ) ELSE 0 END AS TotalHY, Sort = 1 FROM
AirportProduces_2006 A
LEFT JOIN Airports B ON A.Airport_DM = B.Airport_DM
LEFT JOIN Areas AS C ON C.Area_DM = A.Area_DM
LEFT JOIN HBXZ AS D ON A.HBXZ = D.CHAR_CODE
WHERE A.Produce_Date >= '2006-01-01' AND A.Produce_Date <= '2006-02-28'
AND (A.Area_DM = '51') GROUP BY A.Area_DM, A.Airport_DM, B.QC, C.ParentId,D.CHAR_SORT
) AS SUMTable GROUP BY Area_DM, Airport_DM, ParentId, AirportName
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!