MS Access:查询中的First()函数未检索正确的值

时间:2018-06-20 18:10:23

标签: sql ms-access access

我有4-6个表,但是主要的是LRTTable和TempTable。他们使用INNER JOIN进行联接,结果集是LEFT JOIN和其他6个表。

LRTable和Temp Table包含商店ID,PCC ID,COF NO,业务名称,状态,地址和其他一些列。 LRTable可以具有相同商店ID的重复记录,但记录的COF号为(0,7987987),而业务名称(食品和零售)不同。

临时表具有商店ID PCC。这两个的组合是Access中的主键。

查询能够正确地基于TempTable从LRTable中提取所有数据。例如,当临时表中存在匹配项时,查询将从LRtable中提取所有记录(包括重复项),并根据状态码和业务范围进行排序。这样,我确保活动记录和食物记录都位于顶部。

我需要实现的是,我不希望查询结果集中的每个商店都有多个记录,而是只希望结果集中每个商店的记录集中的最高记录。我可以使用第一个函数来实现这一点,但是它的选择值来自LRTable而不是子查询结果

有没有一种方法可以从子查询中选择?

LRTable:

  Store ID   PCC ID    Status    Line of Business Name COF No 
 ---------- -------- ---------- ----------------------- 
         1      123   Active     Food                   999
         1      123   InActive   Food                   89899
         1      123   Active     Retail                 0
         2      222   Active     Retail                 0
         2      222   InActive   food                   76767

临时表

Store ID : 1 and 2 
PCC : 123 and 222

Result: 


 - 1,0
 - 2,0

Expected output:

 - 1,999
 - 2,76767

下面是带有第一个

的查询
SELECT StoreID,FIRST (COF No)  from
 ( 
  select * from 
 (
   SELECT distinct TempTable.[Avendra ID],
    TempTable.[Marsha Code],
    LRTable.[Concept Name],
    LRTable.[Outlet (Store) Name],
    LRTable.[Outlet Street Address Text ID],
    LRTable.[Outlet City ID],
    LRTable.[Outlet State ID],
    LRTable.[Outlet Zip Code ID],
    LRTable.[Status Code ID],
    LRTable.[Outlet SAP ID ID],
    LRTable.[Outlet PCC ID ID],
    LRTable.[COF Number ID],
    CLPSource.[Brand Mandated],
FROM (
    (
        (
            (
                (
                    (
                        LRTable INNER JOIN TempTable 
                            ON LRTable.[Outlet PCC ID ID] = TempTable.[PCC ID]
                            AND LRTable.[Store Number ID] = TempTable.[Store Number ID]
                        ) LEFT JOIN CLPSource 
                            ON TempTable.[Avendra ID] = CLPSource.[Avendra Customer ID]
                    ) LEFT JOIN OasisReportSource 
                            ON TempTable.[Marsha Code] = OasisReportSource.[Marsha])

                ORDER BY LRTable.[Status Code ID],
                    LRTable.[Line of Business Name]))

Group by LRTable.[StoreID]

1 个答案:

答案 0 :(得分:0)

使用LRTemp表和Temp Table面板中提供的数据,实际输出和所需输出,我认为可以使用FIRST聚合函数(即

)来完成。
SELECT StoreID, FIRST(PCC ID), FIRST(Status), FIRST(Line of Business Name), FIRST (COF No)
FROM (joined LRTable and TempTable)
GROUP BY StoreId

然后,您应该获取每个StoreId的第一个记录数据。