Pivoting เป็นสนามจากพื้นฐานที่อยู่ในช่วงวันที่กำหนดในโต๊ะบีนั่นคือ>=ที่อยู่ในช่วงวันที่กำหนดในโต๊ะเป็น

0

คำถาม

ฉันกำลังพยายาม pivot แถวเข้าไปในคอลัมน์นั่นอยู่บนพื้นฐานของ formatted องวัน'yyyy-อืมและตอนนี้ทำงานเป็นคาดหวังให้เป็นปัจจุบันเดือนช่วงเวลามันล้มเหลวที่จะทำงานสำหรับอนาคตเดือนและฉันไม่สามารถหาวิธีที่จะแก้ไขเรื่องนี้และจะ greatly นซาบซึ้งมีการแจ้งเตือนการเริ่มทำงานกับเรื่องนี้

นี่คือนิดหน่อยของพื้นหลัง: ฉันต้องซื้อริมาจากผู้จำหน่ายรายงานสรุปโต๊ะนั่นรวมถึงการข้อมูลเกี่ยวกับสัญญาอย่างเช่นสัญญาประเภทริมาณมากเบอร์ของวันที่แฟ้มถูกสร้างจา formatted ไปยัง'yyyy-อืมเป็นจริงวันมันไม่สำคัญหรเพื่อสิ่งนี้

ที่เหลืออยู่ริคืออีกสองมาจากรายการบัญชีรายการโต๊ะซึ่งเป็นพื้นฐานแล้วสรุปได้แรงขึ้นทุกประเภทของรายการจากพื้นฐานมากมายเลข

กลือนกิริคือสิ่งที่ฉันกำลังพยายาม pivot จากรายเดือนมันกลือนกินและก็มาจากรายการบัญชีรายการกับคนประเภทรายการตัวกรอง

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

ผลลัพธ์(เดียวที่แสดงบางส่วนของ):

enter image description here

อย่างที่คุณเห็นที่สองเอบีซีเทคโนโลยีบันทึกแสดงเป็น consumption ใน 2021-ต.ค.นั่นคือที่ถูกต้อง,อย่างไรก็ตามเพราะเรื่องนั้นจ้างซื้อจำนวนมากก็อยู่ใน 2021-ต.ค.แล้วมันคืออะไรที่เหลืออยู่ในบันทึกที่ consumption ต้องการที่จะเป็น 9,373 และมันสั้น(383)เมื่อเทียบกับที่ 8,990 มันเป็นยำแสดงใน 2021-ต.ค.. ในกรณีนี้ค 383 จริงๆ consumption กำลังตกอยู่ใน 2021-พ.ย.อย่างไรก็ตามของฉันรหัสไม่เหมือนจะรับมันซะ

นี่คือส่วนผสมที่แน่นอนคดีในทั้งสองก็ต้องเทคโนโลยีบันทึกด้วยงั้น,ที่ไหนที่เหลือคือ 0 ซึ่งหมายความว่ามันถูกทั้งหมดมกมุ่นอย่างไรก็ตามตั้งแต่ซื้อสัญญาวันที่สำหรับทั้งสองของพวกเขาอยู่ใน 2021-ก.ย.และ consumption อยู่ในอนาคตกตอนเดือน 2021-ต.ค.ที่สคริปต์ภาษา sql ไม่ได้รับมันซะ

ฉันจะซาบซึ้งมากมีคำแนะนำที่ช่วยแก้ไขเรื่องนี้แล้วขอบคุณล่วงหน้า

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

คำตอบที่ดีที่สุด

0

คุณเป็น pivoting ขึ้นอยู่กับกับ.[วันไหนคือตอนที่มากมายถูกซื้อไม่ได้ตอนที่มันกินเข้าไป. สามคนสุดท้ายคอลัมน์เดียวที่จะแสดงภาพตัวอย่างขนาดเล็กตอนที่เป็นรายการซื้อและกลือนกินในที่เดียวกันเดือน

แทนที่จะเป็น pivoting ทั้งวันที่,ย้าย pivot เข้าไปในครั้งที่สาม subquery. นี่ simplifies ที่สืบค้นโดยคนมากมายรายละเอียดรวมทั้ง Contracted_Qty และ Remaining_Qty แรกและจากนั้นร่วมกับสา subquery ซึ่งเป็ pivoted ตั้งค่าของ Consumed_Qty โดยมากมายที่สามเดือนแล้ว

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_]
;

ฉันไม่สามารถทดสอบนี้กับการค้นหาโดยไม่มีข้อมูลแต่มันควรจะใกล้ชิดกันมาก

2021-11-23 20:47:23

ขอบคุณสำหรับของคุณการตอบสนองเลย เหตุผลที่ฉันใช้ผลรวม(ที่เหลืออยู่)คือเพราะว่ารายการบัญชีรายการโต๊ะได้หลายประเภทรายการ,การซื้อขาย,การปรับเปลี่ยน,ณูปโภค ศูนย์ของรายการสำหรับแต่ละประเภทมากมายเลขคือสิ่งที่ทำให้ฉันรู้สึกต้องที่เหลืออยู่ qty และมันผูกออกไปของฉันมากมายรายการสิ่งของบัญชีเล่มหนึ่ง. อย่างไรก็ตามเมื่อตอนนี้ฉันใช้ CQ.วันที่ตรง pivot และลบ>=วันที่มาร่วมกับบ CQ มันตอนนี้ทำซ้ำการซื้อขายบันทึกสำหรับแต่ละเดือน consumption ทำให้ผู้ซื้อทั้งหมดโดยมาไม่ถูกต้องแล้ว อะไรอีกข้อมูลของฉันให้ช่วยอธิบายปัญหาของฉันดีขึ้นเหรอ? ดีใจอย่างยิ่งเวลาของคุณและช่วยเรื่องนี้
Vic

หน้าการปรับแก้ค่าการกจะต้องย้าย pivot เข้าไปในครั้งที่สามย่อยกับการค้นหา. แทนที่จะเป็น pivoting ทั้งวันที่พาคนมากมายรายละเอียดรวมทั้ง Contracted_Qty และ Remaining_Qty และจากนั้นร่วมกับสา subquery ซึ่งเป็ pivoted ตั้งค่าของ Consumed_Qty โดยมากมายที่สามเดือนแล้ว
RobertT

ฉันยังคงสงสัยว่าคุณสามารถหาริมดที่เหลืออยู่โดยสรุปได้แรงบางอย่าเบอร์ คุณสามารถให้บางตัวอย่างข้อมูลเพื่อแสดงให้เห็?
RobertT

ไม่เคยในปริมาที่เหลืออยู่. ฉันเพิ่งนึกออกว่าบัญชีของคุณโต๊ะต้องบันทึกทุกจำนวนในสองคนคอลัมน์. ที่เหลือริเป็นเหมือนกันนอกบวกหรือลบเบอร์ขึ้นอยู่กับคนประเภทรายการ. สรุปได้แรงมันจะยอมจำนนต่อปริมาที่เหลืออยู่. คอลัมน์ชื่อโยนฉันออก
RobertT

ใช่นั่นคือคำตอบที่ถูกต้อง! พวกผู้ชมน่ะได้ยินพวกเธอที่บัญชีโต๊ะบันทึกแต่ละรายการ.
Vic

พวกผู้ชมน่ะได้ยินพวกเธอเป็นความคิดที่ดี! ฉันจะพยายามเคลื่อนที่ pivot เข้าไปใน subquery คุณพูดถูกเรื่องก่อนส่วนหนึ่งแม้ว่าฉันมีของฉัน pivot จากการซื้อขายเดทแทนที่จะเป็นของ consumption เดทกันต่อผมรวมกลุ่มโดยมากไม่ได้ ซึ่งดูเหมือนจะต้องซ่อมเหมือนไม่มีปัญหาอยู่เลยสินะ แต่ฉันชอบความคิดของเคลื่อนที่ pivot สา subquery จะแจ้งความคืบหน้าให้คุ! ขอบคุณ
Vic

คำตอบข้อมูลจากการแจ้งเตือนการเริ่มทำงานอยู่ในความคิดเห็น
RobertT

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่