SQL计数具有子句的多个列

时间:2015-08-07 16:42:51

标签: sql ms-access ms-access-2013

我正在尝试在[MFG #][CM HT][CM WT]CBM列中查找重复记录,同时仍会看到一些名为ProdKeywords的其他列(不在此SQL语句中)和DateCode。但是我坚持GROUP BY条款。 MS Access要求我输入我在SELECT语句中放入的所有列。我还尝试在HAVING语句中添加每一列。

 SELECT First(tblDat01Prod.[DATE CODE]) AS FirstOfDateCode, tblDat01Prod.[MFG #], tblDat01Prod.[CM HT], tblDat01Prod.[CM WDT], tblDat01Prod.[CM DPT], tblDat01Prod.CBM INTO temp_Delete
 FROM tblDat01Prod
 GROUP BY tblDat01Prod.[MFG #], tblDat01Prod.[CM HT], tblDat01Prod.[CM WDT], tblDat01Prod.[CM DPT], tblDat01Prod.CBM
 HAVING (((Count(*))>1));

重复记录在' [MFG#]' ' [CM HT]' ' [CM WDT]' &安培; ' [CM DPT]'我还想让它返回每个与ProdKeywordsDATE CODE一起重复的记录

我想象查询看起来像这样

 SELECT tblDat01Prod.[DATE CODE], tblDat01Prod.[MFG #], tblDat01Prod.[CM HT], tblDat01Prod.[CM WDT], tblDat01Prod.[CM DPT], tblDat01Prod.CBM, tblDat01Prod.[ProdKeywords]
 FROM tblDat01Prod
 GROUP BY tblDat01Prod.[MFG #], tblDat01Prod.[CM HT], tblDat01Prod.[CM WDT], tblDat01Prod.[CM DPT], tblDat01Prod.CBM
 HAVING (((Count(*))>1)) -----Except for prodkeywords and DATE CODE;

1 个答案:

答案 0 :(得分:0)

如果我理解您的情况,此查询将向您显示 MFG# CM HT CM WDT CM DPT 和 CBM ,它包含在多个记录中......

SELECT
    t.[MFG #],
    t.[CM HT],
    t.[CM WDT],
    t.[CM DPT],
    t.CBM
FROM tblDat01Prod AS t
GROUP BY
    t.[MFG #],
    t.[CM HT],
    t.[CM WDT],
    t.[CM DPT],
    t.CBM
HAVING Count(*)>1;

如果这是正确的,剩下的问题是您希望查看包含这些重复值的源记录,请将该查询保存为 qryDupValues 。然后创建一个新的查询,将 tblDat01Prod 表连接到 qryDupValues

SELECT
    t.[MFG #],
    t.[CM HT],
    t.[CM WDT],
    t.[CM DPT],
    t.CBM,
    t.ProdKeywords,
    t.[DATE CODE]
FROM
    tblDat01Prod AS t
    INNER JOIN qryDupValues AS q
    ON
            t.[MFG #] = q.[MFG #]
        AND t.[CM HT] = q.[CM HT]
        AND t.[CM WDT] = q.[CM WDT]
        AND t.[CM DPT] = q.[CM DPT]
        AND t.CBM = q.[CBM];

或者,您可以使用子查询代替单独的 qryDupValues 保存的查询。如果需要,你可以稍后再这样做。但我希望这种堆叠查询方法最初会更容易管理。