我正在迁移一个将数据从MySQL数据库拉到SQL数据库的项目。问题是我遇到了重复的记录,当我使用MySQL数据库时,这些记录能够快速解决。另一方面,SQL给了我一些问题。
我有两个表:AllOrderData和CallSettings
两个表都有一个标记为OrderNumber的列。有时,两个表上的多个记录具有相同的OrderNumber。在这种情况下,我只需要显示一条记录即可。
这就是我现在拥有的:
$dt = $_GET ["dt"];
$sql = "SELECT
A.OrderNumber,
A.DetailShipDate,
A.ETC,
C.OrderNumber,
C.ETC
FROM AllOrderData A
INNER JOIN CallSettings C ON A.OrderNumber = C.OrderNumber
WHERE A.DetailShipDate = '$dt'";
我试图添加DISTINCT以及GROUP BY,但是我已经阅读了它们用于不同的行的情况,只是不起作用。
当我使用MySQL时,我将所有数据都放在一个表中。不幸的是,这不再是一个选择,但是查询非常简单:
$sql_string = "SELECT * FROM orders WHERE DetailShipDate='$dt' group by Order_Number
我尝试了以下操作:
$sql = "SELECT x.OrderNumber,
x.EnteredBy,
x.Order_Number,
x.Contact_Name
FROM (SELECT A.OrderNumber,
A.EnteredBy,
C.Order_Number,
C.Contact_Name
row_number() OVER (PARTITION BY A.OrderNumber
ORDER BY C.Order_Number) rn
FROM AllOrderData A
INNER JOIN CallSettings C
ON A.OrderNumber = C.Order_Number
WHERE A.DetailShipDate = '$dt') x
WHERE x.rn = 1;";
出现此错误:
查询准备/执行中的错误。数组([0] =>数组([0] => 42000 [SQLSTATE] => 42000 [1] => 102 [代码] => 102 [2] => [Microsoft] [SQL Server Native Client 11.0] [SQL Server]'('..附近的语法不正确。[message] => [Microsoft] [SQL Server Native Client 11.0] [SQL Server]'('。)附近的语法不正确
答案 0 :(得分:1)
您可以使用row_number()
。按订单号进行分区和排序。
SELECT x.ordernumber,
x.detailshipdate,
x.etc,
x.ordernumber,
x.etc
FROM (SELECT a.ordernumber,
a.detailshipdate,
a.etc,
c.ordernumber,
c.etc,
row_number() OVER (PARTITION BY c.ordernumber
ORDER BY c.ordernumber) rn
FROM allorderdata a
INNER JOIN callsettings c
ON a.ordernumber = c.ordernumber
WHERE a.detailshipdate = ?) x
WHERE x.rn = 1;