2016-09-05 1 views
2

J'ai une table comme ci-dessous en détail: -SQL Server: Union tout et groupe par clause ne fonctionne pas

CREATE TABLE ITEM_DIM 
(
    DOCKET_NO VARCHAR(9), 
    DOC_DT DATETIME, 
    GL_CODE VARCHAR(10), 
    ITEM_CD VARCHAR(15), 
    ITEM_DIMENSION VARCHAR(100), 
    LOT_NOS VARCHAR(15), 
    QTY1 DECIMAL(14, 6), QTY2 DECIMAL(14, 6), QTY3 DECIMAL(14, 6), 
    QTY4 DECIMAL(14, 6), QTY5 DECIMAL(14, 6), QTY6 DECIMAL(14, 6), 
    QTY7 DECIMAL(14, 6), QTY8 DECIMAL(14, 6), QTY9 DECIMAL(14, 6), 
    QTY10 DECIMAL(14, 6), QTY11 DECIMAL(14, 6), QTY12 DECIMAL(14, 6), 
    QTY14 DECIMAL(14, 6), QTY15 DECIMAL(14, 6), QTY16 DECIMAL(14, 6) 
) 

instructions d'insertion pour insérer des données dans le tableau: -

INSERT INTO ITEM_DIM (DOCKET_NO, DOC_DT, GL_CODE, ITEM_CD, ITEM_DIMENSION, 
         LOT_NOS, QTY1, QTY2, QTY3, QTY4, QTY5, QTY6, QTY7, QTY8) 
VALUES ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'INNER DIA', 
     'AA8/ZZ16', 40.1, 40, 39.91, 39.92, 39.93, 39.94, 39.95, 39.96), 
     ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'INNER DIA 1', 
     'AA8/ZZ16', 37.8, 37.71, 37.72, 37.73, 37.74, 37.75, 37.76, 37.77), 
     ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'THICKNESS', 
     'AA8/ZZ16', 0.88, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.77), 
     ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'THICKNESS 1', 
     'AA8/ZZ16', 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78) 

instruction SELECT données d'affichage: -

SELECT 
    DOCKET_NO, DOC_DT, GL_CODE, PARTY_CD, ITEM_CD, ITEM_DIMENSION, LOT_NOS, 
    QTY1, QTY2, QTY3, QTY4, QTY5, QTY6, QTY7, QTY8 
FROM 
    ITEM_DIM 

J'essaie d'obtenir le résultat par image ci-jointe « résultat souhaité »:

enter image description here

Alors j'écris ci-dessous requête pour obtenir résultat souhaité:

SELECT 
    DOC_DT, PARTY_CD, ITEM_CD, LOT_NOS, INNER_DIA, THK 
FROM 
    (SELECT 
     DOC_DT, GL_CODE, PARTY_CD, ITEM_CD, LOT_NOS, QTY1, INNER_DIA, 0 THK 
    FROM ITEM_DIM 
    WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
    UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,QTY2 INNER_DIA,0 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,QTY3 INNER_DIA,0 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,QTY4 INNER_DIA,0 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,QTY5 INNER_DIA,0 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,QTY6 INNER_DIA,0 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,QTY7 INNER_DIA,0 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,QTY8 INNER_DIA,0 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('INNER DIA','INNER DIA 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY1 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY2 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY3 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY4 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY5 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY6 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY7 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1') 
UNION ALL 
SELECT DOC_DT,GL_CODE PARTY_CD,ITEM_CD,LOT_NOS,0 INNER_DIA, QTY8 THK FROM ITEM_DIM 
WHERE ITEM_DIMENSION IN ('THICKNESS','THICKNESS 1')) Z 

mais ma requête affichant le résultat que par image ci-jointe « My_Qry_Result » au lieu du résultat souhaité.

enter image description here

J'ai aussi essayé mais pas obtenir les jointures données souhaitées. Alors s'il vous plaît aidez-moi à obtenir le résultat souhaité - merci

Répondre

0

Voici une façon d'utiliser UNPIVOT. Notez que j'ai changé vos tables à TEMP TABLES pour les tests. Retirez simplement le # devant le nom de la table.

CREATE TABLE #ITEM_DIM 
(
    DOCKET_NO VARCHAR(9), 
    DOC_DT DATETIME, 
    GL_CODE VARCHAR(10), 
    ITEM_CD VARCHAR(15), 
    ITEM_DIMENSION VARCHAR(100), 
    LOT_NOS VARCHAR(15), 
    QTY1 DECIMAL(14, 6), QTY2 DECIMAL(14, 6), QTY3 DECIMAL(14, 6), 
    QTY4 DECIMAL(14, 6), QTY5 DECIMAL(14, 6), QTY6 DECIMAL(14, 6), 
    QTY7 DECIMAL(14, 6), QTY8 DECIMAL(14, 6), QTY9 DECIMAL(14, 6), 
    QTY10 DECIMAL(14, 6), QTY11 DECIMAL(14, 6), QTY12 DECIMAL(14, 6), 
    QTY14 DECIMAL(14, 6), QTY15 DECIMAL(14, 6), QTY16 DECIMAL(14, 6) 
) 


INSERT INTO #ITEM_DIM (DOCKET_NO, DOC_DT, GL_CODE, ITEM_CD, ITEM_DIMENSION, 
         LOT_NOS, QTY1, QTY2, QTY3, QTY4, QTY5, QTY6, QTY7, QTY8) 
VALUES ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'INNER DIA', 
     'AA8/ZZ16', 40.1, 40, 39.91, 39.92, 39.93, 39.94, 39.95, 39.96), 
     ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'INNER DIA 1', 
     'AA8/ZZ16', 37.8, 37.71, 37.72, 37.73, 37.74, 37.75, 37.76, 37.77), 
     ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'THICKNESS', 
     'AA8/ZZ16', 0.88, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.77), 
     ('ZKR000816', '2016-08-20', 'PARTY0002', '1285BRF21OP', 'THICKNESS 1', 
     'AA8/ZZ16', 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78) 


--First we unpivot the Diameter into a TempTable 
IF OBJECT_ID('tempdb..#Diam') IS NOT NULL DROP TABLE #Diam 

select DOC_DT, GL_CODE, ITEM_CD, LOT_NOS, DIA, ROW_NUMBER() OVER (ORDER BY DOC_DT, GL_CODE, ITEM_CD) RN 
INTO #Diam 
FROM 
(SELECT DOC_DT, GL_CODE, ITEM_CD, LOT_NOS, QTY1, QTY2, QTY3, QTY4, QTY5, QTY6, QTY7, QTY8, QTY9, QTY10, QTY11, QTY12, QTY14, QTY15, QTY16 
FROM #ITEM_DIM 
WHERE ITEM_DIMENSION LIKE 'INNER DIA%') as CP 
UNPIVOT 
(DIA for Diams in (QTY1, QTY2, QTY3, QTY4, QTY5, QTY6, QTY7, QTY8, QTY9, QTY10, QTY11, QTY12, QTY14, QTY15, QTY16)) AS UP 

--Next we unpivot the thickness into a TempTable 
IF OBJECT_ID('tempdb..#Thick') IS NOT NULL DROP TABLE #Thick 

select DOC_DT, GL_CODE, ITEM_CD, LOT_NOS, THK, ROW_NUMBER() OVER (ORDER BY DOC_DT, GL_CODE, ITEM_CD) RN 
INTO #Thick 
FROM 
(SELECT DOC_DT, GL_CODE, ITEM_CD, LOT_NOS, QTY1, QTY2, QTY3, QTY4, QTY5, QTY6, QTY7, QTY8, QTY9, QTY10, QTY11, QTY12, QTY14, QTY15, QTY16 
FROM #ITEM_DIM 
WHERE ITEM_DIMENSION LIKE 'THICKNESS%') as CP 
UNPIVOT 
(THK for Thickness in (QTY1, QTY2, QTY3, QTY4, QTY5, QTY6, QTY7, QTY8, QTY9, QTY10, QTY11, QTY12, QTY14, QTY15, QTY16)) AS UP 



--Now bring them together, based on the Row Number 
SELECT 
    d.DOC_DT, 
    d.GL_CODE as PARTY_CD, 
    d.ITEM_CD, 
    d.LOT_NOS, 
    d.DIA as INNER_DIA, 
    t.THK 
FROM #Diam d 
INNER JOIN #Thick t on 
    t.RN = d.RN 

RÉSULTATS CI-DESSOUS. COMMANDEZ-LES COMME VOUS L'AIMEZ

enter image description here