簡體   English   中英

添加列時缺少SQL結果

[英]SQL Results Missing When Adding Columns

試圖找出導致我的SQL Server查詢不返回任何結果的問題。 我有一個查詢,查詢在單個PO上的大小級別上有多個唯一的“請求的交貨日期”。 我使用COUNTDISTINCT進行此操作。 在我添加字段“ PO_ITEM_NUMBER”和“ REQ_DELIV_DATE”之前,它是完美的,這是企業要求的。 我不確定為什么會引起問題-供參考,我們的PO表層是Header,Item,Size-粒度最細,它是基於SAP的。

查詢:

SELECT E.TEAM_MEMBER_NAME [EMPLOYEE],
       H.PO_TYPE,
       H.PO_ISSUE_DATE,
       S.PO_NUMBER,
       S.MATERIAL,
       M.DESCRIPTION,
       H.PO_ORDERED_QUANTITY [PO_QUANTITY], -- if you sue SUM(S.PO_ORDERED_QUANTITY - you get more results but wrong totals
       K.BUSINESS_SEGMENT_DESC,
       S.PO_REQ_DELIV_DATE,
       S.PO_ITEM_NUMBER


FROM   PDX_SAP_USER..VW_PO_SIZE S --- you can use .. insetead of .dbo.
JOIN   ADI_USER_MAINTAINED..SCM_PO_Employee_Name E --- join the po to employee assigment table
ON     S.PO_NUMBER = E.PO_NUMBER
JOIN   PDX_SAP_USER..VW_PO_HEADER H 
ON     E.PO_NUMBER = H.PO_NUMBER 
JOIN   PDX_SAP_USER..VW_PO_ITEM I 
ON     E.PO_NUMBER = I.PO_NUMBER 
JOIN   PDX_SAP_USER..VW_MM_MATERIAL M 
ON     E.MATERIAL = M.MATERIAL 
JOIN   PDX_SAP_USER..vw_kd_BUSINESS_SEGMENT K 
ON     M.BUSINESS_SEGMENT_CODE = K.BUSINESS_SEGMENT_CODE

WHERE  I.PO_BALANCE_QUANTITY > 0 ---exclude any fully received PO's
AND NOT EXISTS (SELECT * FROM VW_PO_ITEM I1 WHERE DEL_INDICATOR = 'L' AND I.PO_NUMBER = I1.PO_NUMBER)

GROUP BY S.PO_NUMBER, 
         E.TEAM_MEMBER_NAME, 
         H.PO_TYPE, 
         H.PO_ISSUE_DATE, 
         S.MATERIAL, 
         M.DESCRIPTION,
         K.BUSINESS_SEGMENT_DESC,
         H.PO_ORDERED_QUANTITY,
         S.PO_REQ_DELIV_DATE,
         S.PO_ITEM_NUMBER

HAVING COUNT(DISTINCT S.PO_REQ_DELIV_DATE) > 1

ORDER BY S.PO_NUMBER

添加與結果一起使用的查詢:

SELECT E.TEAM_MEMBER_NAME [EMPLOYEE],
       H.PO_TYPE,
       CONVERT(VARCHAR(12),H.PO_ISSUE_DATE,101) [PO_ISSUE_DATE],
       S.PO_NUMBER,
       S.MATERIAL,
       M.DESCRIPTION,
       H.PO_ORDERED_QUANTITY [PO_QUANTITY], --- if you use SUM(S.PO_ORDERED_QUANTITY) - you get more results but wrong totals
       K.BUSINESS_SEGMENT_DESC


FROM   PDX_SAP_USER..VW_PO_SIZE S --- you can use .. insetead of .dbo.
JOIN   ADI_USER_MAINTAINED..SCM_PO_Employee_Name E --- join the po to employee assigment table
ON     S.PO_NUMBER = E.PO_NUMBER
JOIN   PDX_SAP_USER..VW_PO_HEADER H 
ON     E.PO_NUMBER = H.PO_NUMBER 
JOIN   PDX_SAP_USER..VW_PO_ITEM I 
ON     E.PO_NUMBER = I.PO_NUMBER 
JOIN   PDX_SAP_USER..VW_MM_MATERIAL M 
ON     E.MATERIAL = M.MATERIAL 
JOIN   PDX_SAP_USER..vw_kd_BUSINESS_SEGMENT K 
ON     M.BUSINESS_SEGMENT_CODE = K.BUSINESS_SEGMENT_CODE

WHERE  I.PO_BALANCE_QUANTITY > 0 ---exclude any fully received PO's
AND NOT EXISTS (SELECT * FROM VW_PO_ITEM I1 WHERE DEL_INDICATOR = 'L' AND I.PO_NUMBER = I1.PO_NUMBER)

GROUP BY S.PO_NUMBER, 
         E.TEAM_MEMBER_NAME, 
         H.PO_TYPE, 
         H.PO_ISSUE_DATE, 
         S.MATERIAL, 
         M.DESCRIPTION,
         K.BUSINESS_SEGMENT_DESC,
         H.PO_ORDERED_QUANTITY

HAVING COUNT(DISTINCT S.PO_REQ_DELIV_DATE) > 1

ORDER BY S.PO_NUMBER

結果:

EMPLOYEE                       PO_TYPE PO_ISSUE_DATE PO_NUMBER  MATERIAL           DESCRIPTION                              PO_QUANTITY                             BUSINESS_SEGMENT_DESC
------------------------------ ------- ------------- ---------- ------------------ ---------------------------------------- --------------------------------------- ----------------------------------------------------------------------------------------------------
Christopher Olson              NB      01/19/2017    0282238419 CD7078             ESS 3S PANT WVN                          2054                                    CORE APP MEN SPORT ADIDAS
Juan Gomez                     NB      02/23/2017    0282524995 S98775             ESS LIN P/O FT                           103                                     CORE APP MEN SPORT ADIDAS
Christopher Olson              NB      03/09/2017    0282598957 BK7410             ESS LGO T P SJ                           619                                     ATHLETICS APP MEN ADIDAS
Juan Gomez                     NB      03/28/2017    0282706115 S97155             ESS LIN TIGHT                            961                                     CORE APP WOMEN SPORT ADIDAS
Juan Gomez                     NB      09/21/2017    0283752965 CF8152             BOS LABEL                                7900                                    ATHLETICS APP MEN ADIDAS
Julie Lange-May                12      10/02/2017    0283796594 DQ1421             WOVEN JACKET W                           1020                                    ATHLETICS APP WOMEN ADIDAS
Kekai Ariola                   NB      10/10/2017    0283837426 AC7366             PW HU HOLI Tennis Hu MC                  5655                                    STATEMENT FTW ADIDAS
Cody Lofquist                  NB      11/10/2017    0283944933 DB2061             PREDATOR TANGO 18.1 TR                   1756                                    FOOTBALL FTW ADIDAS
Andrew Zapata                  05      11/13/2017    0283961402 CG6440             NEMEZIZ 18.1 FG W                        543                                     FOOTBALL FTW ADIDAS
Christopher Olson              NB      11/20/2017    0283981666 CV7748             ASSITA 17 GK Y                           1648                                    FOOTBALL APP GENERIC ADIDAS
Cody Lofquist                  NB      11/21/2017    0283984539 DB2165             COPA 18.1 FG                             501                                     FOOTBALL FTW ADIDAS
Julie Lange-May                NB      11/26/2017    0284043157 CE4368             I GRPHC STSET                            1333                                    ORIGINALS APP KIDS ADIDAS
Trey Pflug                     NB      11/27/2017    0284048754 CQ3168             SOLAR BOOST M                            3500                                    RUNNING FTW MEN ADIDAS
Dave Laws                      NB      11/28/2017    0284059045 DB2966             YEEZY 500                                15334                                   YEEZY FTW ADIDAS
Dave Laws                      NB      11/28/2017    0284059047 DB2966             YEEZY 500                                12584                                   YEEZY FTW ADIDAS
Christopher Olson              NB      12/06/2017    0284094060 BJ9165             TASTIGO17 SHO W                          7522                                    FOOTBALL APP GENERIC ADIDAS
Christopher Olson              NB      12/06/2017    0284094212 BK0350             TIRO17 TRG PNTW                          7091                                    FOOTBALL APP GENERIC ADIDAS
Cody Lofquist                  NB      12/08/2017    0284107301 DB2062             PREDATOR TANGO 18.1 TR                   2110                                    FOOTBALL FTW ADIDAS
Trey Pflug                     NB      12/11/2017    0284115640 BC0674             SOLAR BOOST W                            1752                                    RUNNING FTW WOMEN ADIDAS
Kim Moreland                   NB      12/12/2017    0284137355 DJ3033             D2M K SHT                                1730                                    CORE APP WOMEN SPORT ADIDAS
Cody Lofquist                  NB      12/12/2017    0284141196 DB2126             PREDATOR TANGO 18.3 IN                   1988                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      12/12/2017    0284141253 AQ0612             NEMEZIZ MESSI TANGO 18.3 TF              526                                     FOOTBALL FTW ADIDAS
Dave Laws                      NB      12/15/2017    0284170426 DB2966             YEEZY 500                                2918                                    YEEZY FTW ADIDAS
Cody Lofquist                  NB      12/16/2017    0284174671 DB2248             X 18.1 FG                                668                                     FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      12/16/2017    0284174673 DB2039             PREDATOR 18.1 FG                         489                                     FOOTBALL FTW ADIDAS
Christopher Olson              ER      12/20/2017    0284207872 BS4250             TASTIGO17 SHO                            404                                     FOOTBALL APP GENERIC ADIDAS
Ben Paul                       NB      12/19/2017    0284208137 CG0584             REAL A JSY                               811                                     FOOTBALL APP LICENSED ADIDAS
Julie Lange-May                NB      01/07/2018    0284316616 DN4273             UAS BEANIE                               120                                     ORIGINALS APP MEN ADIDAS
Cody Lofquist                  NB      01/08/2018    0284319552 DB2063             PREDATOR TANGO 18.1 TR                   2001                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284464341 DB2214             X 18+ FG                                 582                                     FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284464343 DB2013             PREDATOR 18+ FG                          2201                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284464344 DB2072             NEMEZIZ 18+ FG                           1467                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284464346 DB2251             X 18.1 FG                                620                                     FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284464348 DB2167             COPA 18.1 FG                             1714                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284464349 DB2089             NEMEZIZ MESSI 18.1 FG                    988                                     FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284464350 DB2040             PREDATOR 18.1 FG                         2061                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/19/2018    0284465944 DB2001             PREDATOR 18.3 FG                         7008                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      01/23/2018    0284489924 772109             SAMBA CLASSIC                            419                                     FOOTBALL FTW ADIDAS
Andrew Zapata                  05      02/02/2018    0284539184 DH3869             CLIMA 3.0 TEE                            1853                                    ACTION SPORTS APP ADIDAS
Cody Lofquist                  NB      02/06/2018    0284550445 BB0571             Goletto VI FG J                          5562                                    FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      02/24/2018    0284666220 DM2092             MLS ASG OMB                              424                                     FOOTBALL ACC HW ADIDAS
Christopher Olson              NB      01/19/2018    0284666914 BP9111             D2M 3S SHORT                             11811                                   CORE APP MEN SPORT ADIDAS
Cody Lofquist                  NB      02/27/2018    0284684097 019228             MUNDIAL TEAM                             657                                     FOOTBALL FTW ADIDAS
Cody Lofquist                  NB      03/06/2018    0284704098 CD4683             GENERICWCBOX                             80000                                   FOOTBALL ACC HW ADIDAS
Kekai Ariola                   NB      03/08/2018    0284728508 BB7619             Sobakov                                  1775                                    ORIGINALS FTW MEN ADIDAS
Kim Moreland                   NB      03/08/2018    0284730274 BP9733             ULT SS T                                 2557                                    TRAINING APP MEN ADIDAS
Kekai Ariola                   05      03/27/2018    0284865999 B37532             EQT SUPPORT SK PK W                      347                                     ORIGINALS FTW WOMEN ADIDAS
Kekai Ariola                   05      03/27/2018    0284866000 B37545             EQT SUPPORT SK PK W                      357                                     ORIGINALS FTW WOMEN ADIDAS
Kim Moreland                   NB      04/06/2018    0284914322 DH3591             Tech Tee                                 10042                                   TRAINING APP WOMEN ADIDAS
Cody Lofquist                  NB      04/10/2018    0284930265 CW5627             Pred FS JR MN                            1651                                    FOOTBALL ACC HW ADIDAS
Kekai Ariola                   NB      04/10/2018    0284930449 B41794             PW TENNIS HU                             315                                     ORIGINALS FTW MEN ADIDAS

(51 row(s) affected)
If you added HAVING clause recently then comment and check.  
If not then change the INNER JOIN TO LEFT join from bottom to top one at a time and execute the query and check.
This way you can troubleshoot the issue easily.
Unless we have the sample data for all the tables you are used the query it will be difficult to answer.
WITH POsToReturn AS (
SELECT S.PO_NUMBER   
FROM   PDX_SAP_USER..VW_PO_SIZE S 
JOIN   PDX_SAP_USER..VW_PO_ITEM I 
ON     I.PO_NUMBER = S.PO_NUMBER 
WHERE  I.PO_BALANCE_QUANTITY > 0
GROUP BY S.PO_NUMBER
HAVING COUNT(DISTINCT S.PO_REQ_DELIV_DATE) > 1
AND COUNT(CASE WHEN I.DEL_INDICATOR = 'L' THEN 1 END) = 0
)
SELECT <your columns>
FROM   POsToReturn P
JOIN   PDX_SAP_USER..VW_PO_SIZE S
ON     S.PO_NUMBER = P.PO_NUMBER
...    <join the rest of the tables for the detail columns>
--     leave out the entire group by!

或者,您可以采用以下方法:

with data as (
    select
        count(distinct S.PO_REQ_DELIV_DATE)
            over (partition by S.PO_NUMBER) as rdd_count
        <insert rest of main query>
)
select ... from data
where rdd_count > 1
order by S.PO_NUMBER;

至於理解原因,我認為您還看到了其他查詢,人們在其中向group by子句添加了列,這樣他們就可以解決關於非聚合的神秘錯誤消息。 如果不是這樣,那么您已經看到那些令人迷惑地允許非標准行為的系統,這些行為給出的結果完全沒有錯誤。

通常,人們想要完成的工作是這樣的:我已經在按客戶ID分組了,但是我也希望結果中包含客戶名稱。 因此,他們將該額外的列添加到“分組依據”列表中,一切正常。 但是,如果您考慮一下,原因是新列根本沒有更改組,因為每個客戶ID始終始終具有相同的客戶名,這最終是擺脫錯誤的一種簡便方法。 在查詢中,這不是真的:您關心的所有組中確實有多個日期。

我認為最好使用像min(Customer Name) as CustomerName這樣的啞聚合min(Customer Name) as CustomerName 請記住,聚合函數的目的是將多個值折疊為一個值。 必要時,某些系統會隨機選擇一個值,而不會警告您這樣做。 當許多MySQL和Sybase開發人員依靠這種古怪的行為和/或從未真正了解它應該如何工作時,就為此而煩惱。

還要記住,通常,一組是一組多行折疊成的一行。 為了使count(distinct)起作用,需要在一個組中查看多個日期。 但這與將輸出保持為單獨的行的需求相沖突。

本質上,該行本身並不能為您提供足夠的信息來決定是否保留它。 通過使用第二個查詢找出滿足條件的PO_Number列表,然后將其用作過濾器(通過內部PO_Number ,我解決了這個問題。

在第二個示例中,我改用了window函數,該函數使您可以在每行的外部查看,而無需group by的行折疊行為。 兩者的基本讓你做什么, having是為了完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM