2017-02-02 4 views
0

ich zwei Tabellen haben, um rollen pay_tbl und bill_tbl in meiner SQL Server-Datenbank, deren Spalten sindwie mehrere Zeilen in einer einzigen Zeile und Spalte unspezifischen, um in für SQL Server


pay_tbl{pay_id typy int --pk, pay_name type varchar} bill_tbl{pay_id type int --> Fk,bill_date type datetime,bill_amount type int,bill-status type varchar}


Ich versuche, Abrechnungshistorie der letzten 5 Monate jeder pay_ID mit Monatsnamen zu erhalten, ich versuchte eine Abfrage, die gut funktioniert und mir jeden Monat Zeile für Zeile Geschichte zurückliefert, aber ich will dies, seine Rückkehr mir Ergebnis auf diese Weise


pay_ID   Month   Amount To Pay Bill Status 
----------  ------------- -------------- ----------- 
1    January   5000   paid 
1    December   6000   Not Paid 
2    January   3000   paid 
2    December   800   Not Paid 

aber ich auf diese Weise führen will

pay_ID Month Amount To Pay Bill Status Month Amount To Pay Bill Status 

1 January  5000   paid  December 6000   Not Paid 
2 January  3000   Paid December 800   Not paid 

, wie ich dies erreichen kann? Diese Abfrage habe ich versucht, zurückgeführt, mich oben Ergebnis

SELECT DATENAME(month, b.bill_date) AS 'Month',b.bill_amount as 'Amount To Pay', b.bill_status AS 'Bill Status' 
FROM bill_tbl b 
INNER JOIN 
      pay_tbl AS p ON b.payment_id = p.pay_ID 
+0

was bis November passiert ist und warum du so – mohan111

+1

Besser führen müssen , tue dies deine Präsentationsschicht. Wenn Sie dies wirklich in SQL-Abfrage benötigen, dann überprüfen Sie das Schlüsselwort PIVOT ... –

+0

Ich habe nur November als Beispiel übersprungen und ich brauche dies in Gridview zu zeigen, bedeutet jede Zeile haben eine Pay-ID – mjunaid

Antwort

1

Beispieldaten:

DECLARE @Table1 TABLE 
     (pay_ID int, Month varchar(8), AmountToPay int, BillStatus varchar(8)) 
    ; 

    INSERT INTO @Table1 
     (pay_ID, Month, AmountToPay, BillStatus) 
    VALUES 
     (1, 'January', 5000, 'paid'), 
     (1, 'December', 6000, 'Not Paid'), 
     (2, 'January', 3000, 'paid'), 
     (2, 'December', 800, 'Not Paid') 
    ; 

Script

;WITH CTE AS (
select *, row_number()OVER(PARTITION BY pay_ID ORDER BY (SELECT NULL))RN from @Table1) 
,CTE1 AS (
Select * from CTE where RN = 1) 
,CTE2 AS (
Select * from CTE where RN = 2) 


Select row_number()OVER(PARTITION BY J_Month ORDER BY (SELECT NULL)) AS ID, 
J_Month, 
J_AmountToPay, 
J_BillStatus, 
D_Month, 
D_AmountToPay, 
D_BillStatus 
    from (
    select 
      C.pay_ID J_pay_ID, 
      C.Month J_Month, 
      C.AmountToPay J_AmountToPay, 
      C.BillStatus J_BillStatus, 
      CC.Month D_Month, 
      CC.AmountToPay D_AmountToPay, 
      CC.BillStatus D_BillStatus, 
      row_number()OVER(PARTITION BY CC.pay_ID ORDER BY (SELECT NULL))RNN 
from CTE1 C,CTE2 CC 
)T WHERE T.RNN = 1 
+0

es ist nur für zwei Monate Januar und Dezember? – mjunaid

+0

Das ist, was Sie gefragt haben. Kannst du jetzt sehen, warum @ Mohan111 nach mehr Details gefragt hat? –

+0

@ zieldaten mehr details? mögen ?? Kannst du bitte erklären ? Soll ich mein gesamtes Projekt mit Ihnen teilen, dann kennen Sie alle Details? – mjunaid

Verwandte Themen