Ravi Sargam Ответов: 1

Выберите другие строки таблицы с помощью сводной таблицы


У меня есть таблица SalesDetails, например

salesid invno сумма
1 345 5000
2 678 500
3 111 1000
4 222 2000
3 333 3000

и таблица TaxDetails

tdid salesid taxid taxname сумма
2 1 1 CST 100
3 1 2 НДС 200
4 1 3 ст 300
5 2 1 НДС 400
6 2 2 ST 500
7 3 1 CST 600
8 3 2 НДС 700
9 3 3 ст 800

с помощью этого запроса

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(taxname) 
                    from TaxDetails where salesid=1
                    group by taxname, taxid
                    order by taxid
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = N'SELECT ' + @cols + N' from 
             (
                select amount, taxname
                from TaxDetails where salesid=1
            ) x
            pivot 
            (
                max(amount)
                for taxname in (' + @cols + N')
            ) p '

exec sp_executesql @query;


Я получил такой результат

СТ НДС КНТ
100 200 300


Но мне нужны данные такого формата

salesid invno сумма CST НДС ST
1 345 5000 100 200 300
2 678 500 400 500
3 111 1000 600 700 800
4 222 2000 0 0 0
3 333 3000 0 0 0


Пожалуйста, помогите мне


заранее спасибо...

Что я уже пробовал:

Объявите @cols как NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

выберите @седла = гадость((выбора ',' + функции quotename(taxname)
из TaxDetails, где salesid=1
группа по taxname, taxid
заказ по taxid
ДЛЯ XML PATH (") ВВЕДИТЕ
). value ('.', ' NVARCHAR (MAX)')
,1,1,'')

set @query = N'Select '+ @cols + N ' from
(
выберите сумму, имя налога
из TaxDetails, где salesid=1
) икс
стержень
(
Макс. (сумма)
для taxname in (' + @cols + N')
) п '

exec sp_executesql @query;

CHill60

Это поможет, если вы действительно дадите нам правильную схему таблицы - "недопустимое имя столбца "налог"". Улучшить вопрос свяжите и дайте нам правильный макет таблицы и примеры данных - в частности, таблицу SalesInvoiceTax

Ravi Sargam

Пожалуйста, проверьте сейчас....... Я дал две таблицы SalesDetails и TaxDetails

1 Ответов

Рейтинг:
12

CHill60

Вам нужно соединить две таблицы в исходном разделе вашего сводного запроса-вашего подзапроса x выше.

Вам также нужно удалить все WHERE пункты, в которых вы ограничиваете salesid = 1

Из-за этого Вам также нужно использовать DISTINCT при генерации списка столбцов, что означает, что вам также необходимо изменить ORDER BY в этом разделе - я использовал ярлык ORDER BY 1 вместо ORDER BY ',' + QUOTENAME(taxname)

Этот запрос довольно близок к вашим ожидаемым результатам, он не точен, потому что приведенные примеры данных не соответствуют вашим ожидаемым результатам:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)
 
select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(taxname) 
                    from TaxDetails 
                    group by taxname, taxid
                    order by 1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
 
set @query = N'SELECT salesid, invno, ' + @cols + N' from 
             (
                select T.salesid, invno, T.amount, taxname
				from  SalesDetails S
				LEFT OUTER JOIN  TaxDetails T ON T.salesid = S.salesid
            ) x
            pivot 
            (
                max(amount)
                for taxname in (' + @cols + N')
            ) p ORDER BY Salesid'
 
exec sp_executesql @query;


Ravi Sargam

@CHill60 спасибо.. это сработало... превосходно.... снова thx....

Karthik_Mahalingam

5

Ravi Sargam

@CHill60 Можете ли вы дать какую-либо идею, как привязать эту таблицу к ретранслятору, я имею в виду неизвестные столбцы заголовков....

CHill60

Извините, ASP.NET это не одна из моих сильных сторон. Элементы управления часто имеют свойство автогенерировать столбец - посмотрите, есть ли у ретранслятора аналогичное свойство.

Ravi Sargam

спасибо за ответ... я сделал это с помощью этой ссылки

http://stackoverflow.com/questions/24013041/how-to-dynamically-bind-asp-net-repeater-control-to-datasource

Ravi Sargam

@CHill60 не могли бы вы помочь мне с этой проблемой?.

Ссылка- http://www.codeproject.com/Questions/1108222/Problem-while-using-UNION-in-SQL"

CHill60

Мацей опередил меня :-)