Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Order by和Group by的SQL联接_Sql_Excel_Ms Access 2007_Vba - Fatal编程技术网

使用Order by和Group by的SQL联接

使用Order by和Group by的SQL联接,sql,excel,ms-access-2007,vba,Sql,Excel,Ms Access 2007,Vba,嗨,我正在尝试从另一个Excel工作簿加入Excel 第一个表中的主键是Part_No。这不是主键,因此无法进行1对1联接 我想从匹配LIKE和notlike关键字的结果中选择最佳订单状态 WHERE语句工作正常,但第一个语句似乎与ORDER BY不匹配,结果是随机的。有时我会收到“取消”的订单——当同一零件的订单在库存中时。当只在库存中首先执行内部选择时,我看到了两行 我正在使用excelvba中的ADODB连接使用Provider=Microsoft.ACE.OLEDB.12.0 怎么了?谢

嗨,我正在尝试从另一个Excel工作簿加入Excel

第一个表中的主键是Part_No。这不是主键,因此无法进行1对1联接

我想从匹配LIKE和notlike关键字的结果中选择最佳订单状态

WHERE语句工作正常,但第一个语句似乎与ORDER BY不匹配,结果是随机的。有时我会收到“取消”的订单——当同一零件的订单在库存中时。当只在库存中首先执行内部选择时,我看到了两行

我正在使用excelvba中的ADODB连接使用
Provider=Microsoft.ACE.OLEDB.12.0

怎么了?谢谢你的帮助

SELECT 
    FIRST(o.Part_No), 
    FIRST(o.Order_Desc),
    FIRST(o.Order_Status)
FROM 
    Parts 
LEFT JOIN
    (
        SELECT * 
        FROM Orders
        WHERE 
            Orders.Order_Desc Like '%keyword%' AND 
            Orders.Order_Desc Not Like '%otherkeyword%'
        ORDER BY 
            IIF(Orders.Order_Status = 'In Stock' , 1, 
            IIF(Orders.Order_Status = 'In Transit' , 2, 
            IIF(Orders.Order_Status = 'Ordered' , 3, 
            IIF(Orders.Order_Status = 'Canceled' , 4)))) ASC
    ) AS o
    ON Parts.Part_No = o.Part_No
GROUP BY Parts.Part_No;
这里有一个例子

List Parts
Part No
1
2

List Orders
Part No    Order_Desc         Order_Status
1          keyword            In Stock
1          keyword            Canceled
2          keyword            Ordered
2          not keyword        In Stock
2          keyword            Canceled
3          keyword            Ordered
3          keyword            In Stock
3          keyword            In Stock
5          not keyword        In Stock

What i get
1          keyword            Canceled (seems Random right or wrong)
2          keyword            Ordered

Desired Result
1          keyword            In Stock
2          keyword            Ordered
希望这个例子有帮助! 我是新来这里发帖子的。很抱歉出现了奇怪的表格

请尝试以下操作:

SELECT 
COUNT(o.Part_No), 
FIRST(o.Part_No), 
FIRST(o.Order_Status), 
FIRST(o.Order_No), 
FIRST(o.Order_Desc),
        IIF(Orders.Order_Status = 'In Stock' , 1, 
        IIF(Orders.Order_Status = 'In Transit' , 2, 
        IIF(Orders.Order_Status = 'Ordered' , 3, 
        4))) AS Order_Status_OrderBy

FROM 
Parts 
LEFT JOIN
(
    SELECT * 
    FROM Orders
    WHERE 
        Orders.Order_Desc Like '%keyword%' AND 
        Orders.Order_Desc Not Like '%otherkeyword%'
    ORDER BY 
        Order_Status_OrderBy
) AS o
ON Parts.Part_No = o.Part_No
GROUP BY Parts.Part_No;

这不起作用。我需要在内部Select中执行Order by,否则我会得到“您试图执行的查询未将指定表达式“Order\u Status\u OrderBy”作为聚合函数的一部分。请将Order\u Status\u OrderBy添加到组by,这将在某些结果中产生多行,每个Order\u Status\u OrderBy对应一行。但行仍然是按正确的顺序写入的,因此按顺序进行操作。只是第一个似乎不起作用。我误解了你的问题。也许你可以用一些数据的例子来解释,这样我就知道你想要什么了。