我用 mySQL 5.5 版本编写了以下代码。
SELECT ss.ParcelID,ss.ParcelName,sh.Qty1,ShapeID1, sh.Qty2,sh.ShapeID2, sh.Qty3, sh.ShapeID3, sh.Qty4,sh.ShapeID4,
MAX(case when ShapeID = 'EM' then Cng_InQty end) as EM_Qty,
MAX(case when ShapeID = 'EM' then Cng_InWeight end) as EM_Weight,
MAX(case when ShapeID = 'PR' then Cng_InQty end) as PR_Qty,
MAX(case when ShapeID = 'PR' then Cng_InWeight end) as PR_Weight,
MAX(case when ShapeID = 'AS' then Cng_InQty end) as AS_Qty,
MAX(case when ShapeID = 'AS' then Cng_InWeight end) as AS_Weight
FROM sql_history ss
join sql_stock sh
WHERE ss.ParcelID = sh.ParcelID
GROUP BY ss.ParcelID;
我需要在 SQL Server 2005 中执行相同的查询,但我无法使用正确的语法编写查询。
最佳答案
在 SQL Server 中,如果不使用聚合函数,则无法在 SELECT
语句中使用不在 GROUP BY
中的列。要么使用聚合函数,要么将其添加到GROUP BY
:
SELECT
ss.ParcelID,
ss.ParcelName,
sh.Qty1,
ShapeID1,
sh.Qty2,
sh.ShapeID2,
sh.Qty3,
sh.ShapeID3,
sh.Qty4,
sh.ShapeID4,
MAX(case when ShapeID = 'EM' then Cng_InQty end) as EM_Qty,
MAX(case when ShapeID = 'EM' then Cng_InWeight end) as EM_Weight,
MAX(case when ShapeID = 'PR' then Cng_InQty end) as PR_Qty,
MAX(case when ShapeID = 'PR' then Cng_InWeight end) as PR_Weight,
MAX(case when ShapeID = 'AS' then Cng_InQty end) as AS_Qty,
MAX(case when ShapeID = 'AS' then Cng_InWeight end) as AS_Weight
FROM sql_history ss
join sql_stock sh ON ss.ParcelID = sh.ParcelID
GROUP BY ss.ParcelID,
ss.ParcelName,
sh.Qty1,
ShapeID1,
sh.Qty2,
sh.ShapeID2,
sh.Qty3,
sh.ShapeID3,
sh.Qty4,
sh.ShapeID4;
然而,Mysql 允许在这种情况下为这些列选择任意值。
关于mysql - 从 mySQL 5.5 到 SQL Server 2005 的语法更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20945516/