mysql - 从 mySQL 5.5 到 SQL Server 2005 的语法更改

标签 mysql sql sql-server-2005

我用 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/

相关文章:

mysql - 避免在 WHERE 子句中使用多个 SELECT

php - 无法从查询中获取值

sql-server-2005 - SQL Server 2008 相对于 SQL Server 2005 有何优势?

php - MySQL INNER JOIN 查询问题

PHP MySQL 搜索不返回结果

mysql - 如何选择另一个表中不存在的行

sql - 如何将sql语句存储在oracle表中?

连接多个表时SQL Server SQL乘以Sum结果

c# - 系统.IndexOutOfRangeException : Index was outside the bounds of the array

php - 使用 foreach 循环使用 move_uploaded_file() 函数上传多个文件