对 Access First() 到 SQL 感到困惑,我尝试使用替代方法,但这给了我错误的数据

Confused on Access First() to SQL, I tried using an alternate but that is giving me the wrong data

我需要获取每组 upc 单元的第一个项目描述,我阅读了很多表格但对如何处理这个问题感到困惑,请帮助。

访问查询

SELECT ItemDescLookups.[Unit UPC Base Item], First(ItemDescLookups.[Item Description]) AS [Item Description]
FROM ItemDescLookups
GROUP BY ItemDescLookups.[Unit UPC Base Item];

我创造了SQL

SELECT TOP (100) PERCENT MIN(dbo.ItemDescLookups.[Item Description]) AS ItemDescription,
           dbo.[Overpack Percentages].[Unit UPC Base Item]
FROM dbo.[Overpack Percentages] LEFT OUTER JOIN dbo.ItemDescLookups ON dbo.[Overpack Percentages].[Unit UPC Base Item] = dbo.ItemDescLookups.[Unit UPC Base Item]
GROUP BY dbo.[Overpack Percentages].[Unit UPC Base Item]
ORDER BY dbo.[Overpack Percentages].[Unit UPC Base Item]

原始数据

Unit UPC Base Item, Item Description    
0001                1LB ASSTD CHOCOLATES    
0001                454 g ASSTD CHOCOLATES  
0001                1LB ASST CHOC DISPLAYER 
0001                1LB ASST HALF PALLET    
0001                1LB ASST CHOC PALLET    
0001                1LB ASST CHOC DISPLR    
0001                1 LB ASSORTED CHOCOLATES    
0001                1LB WRAPPED ASSTD CHOCOLATES    
0001                1 LB ASST. CHOC. POLE PACK  
0001                454 g ASST CHOC DISPLR  
0001                1lb PROMO AC W/FREE 2oz TRL BX  
0001                1 LB ASSTD CHOCOLATES   
0001                1LB ASSTD CHOCO W/FLAG WRAP 
0001                1lb ASSTD CHOC SILVER LABEL 
0001                1 LB ASST CHOC DISPLAYER    
0001                1lb ASSTD CHOC GOLD LABEL   
0001                1LB ASST PALLET 
0001                60-RSC 1# AC (8630) POLE DSP    
0001                12 OZ ASSTD CHOCOLATES  
0002                2LB ASSTD CHOCOLATES    
0002                908 g ASSTD CHOCOLATES  
0002                2LB ASSTD CHOCOLATES FLOOR  
0002                2 LB ASSORTED CHOCOLATES    
0002                2LB ASSTD CHOCOLATES HALF PLT   
0002                2# ASSORTED PALLET PACK 
0002                2LB SAMPLER AST CHOC    
0002                2LB ASSTD CHOC W/FLAG WRAP  
0003                3LB ASSTD CHOCOLATES    
0003                3 LB Asstd Chocolates   
0003                3lb Assorted Chocolates 
0003                3lb Asstd Chocolates  Wrapped   
0005                5LB ASSTD CHOCOLATES    
0005                5 LB ASSTD CHOCOLATES   
0005                2270 g ASSTD CHOCOLATES 

预期结果

Unit UPC Base Item, Item Description
0001                1LB ASSTD CHOCOLATES
0002                2LB ASSTD CHOCOLATES
0003                3LB ASSTD CHOCOLATES
0005                5LB ASSTD CHOCOLATES

我从 SQL

得到的结果
Unit UPC Item           Item Description
    0001                1 LB ASSORTED CHOCOLATES    
    0002                2 LB ASSORTED CHOCOLATES    
    0003                3 LB Asstd Chocolates   
    0005                2270 g ASSTD CHOCOLATES 

您可以在 Access 和 SQL 服务器中使用以下内容:

SELECT Data1.Unit, 
       (select top 1 z.[Item Description] from data1 as z 
    where z.Unit = data1.Unit ORDER BY z.Unit, z.ID) AS myfirst
FROM Data1
GROUP BY Data1.Unit;

因为没有聚合词,所以我们不必在 group by 子句中包含描述。

请记住,上面假定添加到 table 的 ID 的 PK 值。这个 PK 值很重要,因为 select top 1 必须只有 return 一行,否则查询将失败。所以这里的妙招是在 order by 子句中包含两列,以确保只有一行符合前 1 条标准。