2017-02-02 4 views
0

У меня есть две таблицы pay_tbl и bill_tbl в моей базе данных SQL Server, их столбцыкак Ролл несколько строк в одной строки и столбца порядка inspecific в для 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}


Я пытаюсь получить историю выставления счетов за последние 5 месяцев каждого pay_ID с именем месяца, я попробовал запрос, который работает нормально и возвращает мне историю каждого месяца подряд за строкой, но я dun хочу этого, его возвращение мне приводит таким образом


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 

, но я хочу привести таким образом

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 

, как я могу добиться этого? этот запрос я попробовал, который вернул меня выше результат

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

, что случилось с ноября и больше, почему вам нужно привести, как это – mohan111

+1

Лучше , сделайте это для своего уровня презентации. Если вам действительно нужно это в SQL-запросе, тогда проверьте ключевое слово PIVOT ... –

+0

Я просто пропустил ноябрь в качестве примера, и мне нужно это, чтобы показать в gridview, означает, что каждая строка имеет один идентификатор платежа – mjunaid

ответ

1

Образец данных:

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

его только за два месяца Январь и декабрь? – mjunaid

+0

Вот что вы просили. Теперь вы видите, почему @ Mohan111 попросил более подробную информацию? –

+0

@ данные назначения более подробно? как ?? Вы можете объяснить, пожалуйста ? должен ли я поделиться с вами всем своим проектом, тогда вы узнаете все подробности? – mjunaid

 Смежные вопросы

  • Нет связанных вопросов^_^