Otočné pole, na základě datumů v tabulce B, která je >= rozsah dat v tabulce A

0

Otázka

Snažím se pivot řadě do sloupců, které jsou založeny na formátovaných dat 'yyyy-MMM' a když to funguje, jak se očekávalo pro aktuální měsíc období, to nefunguje pro budoucí měsíce a nemůžu přijít na to, jak opravit to, a bych ocenil nějakou zpětnou vazbu na to.

Tady je trochu pozadí: Koupil jsem si množství přicházející od Dodavatele souhrnná tabulka, která obsahuje informace o smlouva jako smluvní typ, množství, číslo šarže, datum vytvoření formátován do 'yyyy-MMM' jako skutečné datum není podstatné pro tento účel.

Zbývající Množství je další pole, přicházející z item ledger vstup tabulce, která je v podstatě shrneme-li všechny druhy údaje na základě čísla šarže.

Spotřebované Množství je to, co se snažím pivot založené na měsíc, to byla spotřebována a je také přichází z položky položek s položkou typ filtru

SELECT * 
FROM 
(
SELECT VS.[Vendor Name], VS.[Vendor No_] AS 'Vendor_No', VS.[Date] AS 'Date', 
SUM(VS.Quantity) AS 'Contracted_Quantity',
SUM(CQ.Consumed_Qty*-1) AS 'Consumed_Qty',
SUM(RQ.Remaining_Qty) AS Remaining_Qty,
'Contract Type' = 
CASE 
  WHEN VS.[Contract Type] = 1 THEN 'CONTRACT A'
  WHEN VS.[Contract Type] = 2 THEN 'CONTRACT B'
  ELSE 'OTHERS'
  END 
FROM
(SELECT [Document No_],[Vendor No_],[Lot No_],FORMAT([Date Created], 'yyyy-MMM') AS 'Date'
      ,[Purch_ Contract No_],[Contract Type],[Quantity] FROM [A].[dbo].[Company$Volume Summary]) VS

/*to identify remaining quantity by lot (Lot no. is included in my VS alias statement)*/
LEFT JOIN (SELECT [Lot No_] ,SUM([Remaining Quantity]) AS Remaining_Qty FROM [A].[dbo].[Company$Item Ledger Entry]
  GROUP BY [Lot No_]) RQ on RQ.[Lot No_] = VS.[Lot No_]

/*to identify consumed volume, if consumption is in future month compared to purchase month, it doesn't populate, this is where I believe the problem is*/
LEFT JOIN (SELECT [Lot No_],FORMAT([Posting Date], 'yyyy-MMM') AS 'Date',SUM([Quantity]) AS Consumed_Qty
FROM [A].[dbo].[Company$Item Ledger Entry]
WHERE [Entry Type] = '5' 
GROUP BY [Lot No_], Format([Posting Date], 'yyyy-MMM')) CQ on CQ.[Lot No_] = VS.[Lot No_] and CQ.Date >= VS.[Date]

GROUP BY VS.[Vendor Name], FORMAT(VS.[Date Created],'yyyy-MMM'), PT.[Contract Type], VS.[Vendor No_]
) cs 
PIVOT
(
 SUM(Consumed_Qty)
  for Date in ([2021-Sep], [2021-Oct], [2021-Nov])
  ) pvt

VÝSLEDEK (zobrazení Pouze částečně):

enter image description here

Jak můžete vidět, druhým ABC Technologie záznamu ukazuje spotřebu v roce 2021-Oct, které je přesné, nicméně, na základě toho, že sjednané množství zakoupit také v roce 2021-Říjen, a to, co zůstalo v záznamu, spotřeba musí být 9,373 a je krátké (383) ve srovnání s na 8990 to je přesně zobrazování v roce 2021-Oct. V tomto případě 383 skutečné spotřeby, klesá v roce 2021-Nov, nicméně, můj kód nezdá, aby si to vyzvednout.

To je přesně případ, v obou Zebra technologies záznamy, kde zbývající je 0, což by znamenalo, že to bylo zcela spotřebováno, nicméně, od kupní smlouvy dat pro obě z nich jsou v letech 2021-Sep a spotřeba je v budoucnu měsíc 2021-Oct, SQL skript, neznamená to zvednout.

Ocenil bych nějaké pokyny, které vám pomohou opravit a díky předem.

pivot sql sql-server tsql
2021-11-22 22:40:04
1

Nejlepší odpověď

0

Ty jsou otočná založené na VS.[Datum] což je, když Hodně byl zakoupen, ne, když byl spotřebován. Poslední tři sloupce se zobrazí pouze čísla, když položky, které byly zakoupeny A spotřebovány ve STEJNÉM měsíci.

Místo otočné celý dataset, přesuňte čep do třetího poddotaz. To zjednodušuje dotazu tím, že se na Spoustu detailů včetně Contracted_Qty a Remaining_Qty první, a pak se připojit na třetí poddotaz, který je otočně sada Consumed_Qty losem tři měsíce.

SELECT VS.[Vendor Name], VS.[Vendor No_] AS 'Vendor_No',
VS.[Contracted_Quantity],
RQ.Remaining_Qty AS Remaining_Quantity,
'Contract Type' = 
CASE 
  WHEN VS.[Contract Type] = 1 THEN 'CONTRACT A'
  WHEN VS.[Contract Type] = 2 THEN 'CONTRACT B'
  ELSE 'OTHERS'
  END,
CQ.[2021-Sep], CQ.[2021-Oct], CQ.[2021-Nov]

FROM
    (
    /* List of Lots with details */
    SELECT 
        [Document No_],[Vendor No_],[Lot No_], [Purch_ Contract No_],[Contract Type],[Quantity] AS [Contracted_Quantity]
    FROM [A].[dbo].[Company$Volume Summary]
    ) VS

    /* Remaining Quantity for each Lot */
    LEFT JOIN (
        SELECT [Lot No_] , SUM([Remaining Quantity]) AS Remaining_Quantity 
        FROM [A].[dbo].[Company$Item Ledger Entry]
        GROUP BY [Lot No_]
        ) RQ on RQ.[Lot No_] = VS.[Lot No_]

    /* Consumed Quantity per Lot for three months*/
    LEFT JOIN (

        SELECT [Lot No_], [2021-Sep], [2021-Oct], [2021-Nov]
        FROM 
        (
        SELECT [Lot No_], FORMAT([Posting Date], 'yyyy-MMM') AS 'Date', SUM([Quantity]) AS Consumed_Qty
        FROM [A].[dbo].[Company$Item Ledger Entry]
        WHERE [Entry Type] = '5' 
        GROUP BY [Lot No_], Format([Posting Date], 'yyyy-MMM')
        ) AS src
        PIVOT
        (
         SUM(Consumed_Qty)
          for [Date] in ([2021-Sep], [2021-Oct], [2021-Nov])
          ) pvt

        ) CQ on CQ.[Lot No_] = VS.[Lot No_]
;

Nemůžu vyzkoušet tento dotaz bez data, ale to by mělo být velmi blízko.

2021-11-23 20:47:23

Díky za vaši odpověď. Důvod, proč jsem pomocí SUM(zbývající) je proto, že item ledger entry tabulka má více vstupů typy, nákup, úpravy, spotřeba. Součet všech vstupních typy pro každé číslo je to, co mě dostane na zbývající množství, a to kravatu, aby můj hodně zásob ledger. nicméně, když jsem teď použít CQ.Data v kontingenční a odstranit >= datum připojit na CQ, to teď duplikáty nákupu záznam pro každý měsíc je spotřeba dělat zakoupit celkem o dost nesprávné. jaké další údaje by mohly musím poskytnout, aby pomoci vysvětlit můj problém lépe? moc díky za váš čas a pomoc s touto
Vic

Další úpravy by bylo přesunout pivot na třetí sub dotaz. Místo otočné celý dataset, získat Spoustu informací včetně Contracted_Qty a Remaining_Qty a pak se připojit na třetí poddotaz, který je otočně sada Consumed_Qty losem tři měsíce.
RobertT

Stále jsem zvědavý, jak se můžete dostat množství zbývající sečtením nějaké číslo. Můžete poskytnout nějaký vzorek dat prokázat?
RobertT

Nevadí, na množství zbývající. Jen jsem si uvědomil, že vaše kniha tabulce musí zaznamenat všechna čísla ve dvou sloupcích. Zbývající Množství, které je buď kladné nebo záporné číslo v závislosti na typ záznamu. Shrneme to by výnos zbývající množství. Sloupec jméno mě zmátlo.
RobertT

Jo to je pravda! To je to, jak knihu tabulka zaznamenává každou položku.
Vic

to je dobrý nápad! Pokusím se pohybuje kontingenční do poddotazu, měl jsi pravdu o první část, i když jsem měl můj pivot na základě kupní datum místo datum spotřeby, a dále jsem seskupeny podle položky č.. který vypadal, že mají pevnou problém. ale líbí se mi představa pohybu čepu do třetí poddotaz, bude vás informovat! Díky
Vic

Odpověď aktualizována na základě zpětné vazby v komentářích
RobertT

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................