Otočné pole, na základe dátumov v tabuľke B, ktorý je >= rozsahu dátumov v tabuľke A

0

Otázka

Snažím sa pivot riadok do stĺpcov, ktoré sú založené na formátovaný dátumy 'yyyy-MMM" a aj keď to funguje, ako sa očakávalo pre aktuálny mesiac v období, keď prestane fungovať pre budúce mesiace a nemôžem prísť na to, ako to opraviť a veľmi by oceniť akúkoľvek spätnú väzbu na to.

Tu je trochu z pozadia: Mám nakúpené množstvo pochádzajú od Dodávateľa súhrnná tabuľka, ktorá obsahuje informácie o zmluve ako zmluvný typ, množstvo, číslo šarže, dátum vytvorenia formátované do 'yyyy-MMM" ako aktuálny dátum nezáleží na tento účel.

Zostávajúce Množstvo je ďalší pole pochádzajúce z položky ledger vstup tabuľke, ktorá je v podstate sčítaním všetky typy položiek založené na číslo šarže.

Spotrebované Množstvo je to, čo som sa snaží pivot založené na mesiac to bolo spotrebovaných a je tiež prichádza z položky kniha záznamov so vstupom typ filtra

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ÝSLEDOK (Len ukáže čiastočne):

enter image description here

Ako môžete vidieť, druhý ABC Technológie záznam ukazuje spotrebu v roku 2021-Október, ktorý je presné, avšak, na základe zmluvne množstvo zakúpiť aj v roku 2021-Október, a to, čo zostáva v tom záznam, spotreby, musí byť 9,373 a je krátke (383) v porovnaní s 8,990 to je presne zobrazenie v roku 2021-Okt. V tomto prípade 383 skutočná spotreba klesá, v roku 2021-Nov, však, môj kód nezdá sa, že vyzdvihnúť, že až.

To je presne prípad v oboch Zebra technologies záznamy rovnako, ak je zostávajúci 0, ktorá by sa povedať, že to bol úplne spotrebované však od kúpnej zmluvy dátumom pre obe z nich sú v 2021-Sep a spotreba je v budúcnosti mesiac 2021-Október, SQL skript nepodá, že až.

Ja by som oceniť všetky pokyny, ktoré vám pomôžu vyriešiť tento a vďaka vopred.

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

Najlepšiu odpoveď

0

Ste výkyvná založené na VS.[Dátum], ktorý je, keď Veľa bola zakúpená, nie vtedy, keď to bolo spotrebované. Posledné tri stĺpce sa zobrazia iba čísla, ak boli veci zakúpené A spotrebované v ROVNAKOM mesiaci.

Namiesto výkyvná celý dataset, presunúť otáčajte do tretej poddotaz. To zjednodušuje dotaz dostať Veľa detailov vrátane Contracted_Qty a Remaining_Qty ako prvé, a potom sa pripojiť k tretej poddotaz, ktoré je pivoted súbor Consumed_Qty tým Veľa do troch mesiacov.

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ôžem otestovať tento dotaz bez dáta, ale to by malo byť veľmi blízko.

2021-11-23 20:47:23

Vďaka za vašu odpoveď. Dôvod, prečo som pomocou SÚČET(zvyšných), je preto položky ledger vstup tabuľka má viacero vstup typy, nákup, úpravy, spotreba. Súčet všetkých vstupných typov pre každé číslo šarže je to, čo ma dostane na zostávajúce qty, a to robí viazať sa na môj veľa zásob ledger. avšak, keď som teraz používať CQ.Dátum pivot a odstrániť >= dátum pripojiť na CQ, to teraz duplikáty nákup záznamu pre každý mesiac spotreby robiť zakúpili celkom žrebom nesprávne teraz. čo iné údaje by som mohol poskytnúť pomôcť vysvetliť môj problém lepšie? oveľa oceniť váš čas a pomoc s týmto
Vic

Ďalšia úprava by sa pohybovať otáčajte do tretej sub dotaz. Namiesto výkyvná celý dataset, získať Veľa detailov vrátane Contracted_Qty a Remaining_Qty a potom sa pripojiť k tretej poddotaz, ktoré je pivoted súbor Consumed_Qty tým Veľa do troch mesiacov.
RobertT

Som ešte zvedavý, ako môžete získať množstvo zostávajúcich spočítaním nejaké číslo. Môžete poskytnúť nejaké ukážkové dáta preukázať?
RobertT

Nevadí, na zostávajúce množstvo. Práve som si uvedomil, vaše financie tabuľka musí zaznamenať každé číslo v dvoch stĺpcoch. Zostávajúce Množstvo je buď pozitívne alebo negatívne číslo v závislosti od typu záznamu. Sčítanie to by priniesli množstvo zostávajúcich. Názov stĺpca hodil ma off.
RobertT

Áno to je správne! To je ako kniha tabuľka zaznamenáva každý vstup.
Vic

to je dobrý nápad! Pokúsim sa pohybujú otáčajte do poddotaz, boli ste pravdu o prvej časti, keď som mal môj pivot na základe dátumu nákupu namiesto dátum spotreby, a potom som zoskupené podľa parcele č. ktoré sa zdalo, že majú problém. ale páči sa mi nápad pohybom otočte tretím poddotaz, bude vás informovať! Vďaka
Vic

Odpoveď aktualizované na základe spätnej väzby v pripomienky
RobertT

V iných jazykoch

Táto stránka je v iných jazykoch

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