Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Есть таблица вида
Товар Доход Дата
Маска 10 10,12,2011
Очки Г-2 5,9 10,12,2011
Штангель 100 14,12,2011

А нужно сделать таблицу вида
Товар 10,12,2011 14,12,2011
Маска 10 NULL
Очки Г-2 5,9 NULL
Штангель NULL 100


Пробовал сделать через Pivot но там нужно знать сколько столбцов, а я не могу ввоидть все столбцы так как это отчёт зща месяц или за год. Помогите пожалуста уже 2 часа бьюся.
5 окт 12, 20:19    [13276322]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Товар Доход Дата
Маска 10 10.12.2011
Очки Г-2 5.9 10.12.2011
Штангель 100 14.12.2011


А нужно сделать таблицу вида
Товар 10.12.2011 14.12.2011
Маска 10 NULL
Очки Г-2 5.9 NULL
Штангель NULL 100
5 окт 12, 20:25    [13276335]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Топ 10 вопрос 10.
5 окт 12, 20:25    [13276337]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
qwerty112
Guest
Kimel
...
Пробовал сделать через Pivot но там нужно знать сколько столбцов, а я не могу ввоидть все столбцы так как это отчёт зща месяц или за год. Помогите пожалуста уже 2 часа бьюся.

1
Pivot + динамический скл

2
>> отчёт зща месяц

если имя столбца, не дата, а день (1,2,3,...) то это всего 4-е варианта
можно "плюнуть" и сделать 4-е варианта по условию ...
5 окт 12, 20:27    [13276344]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Дата в таблице храниться вида 2012-10-03 00:00:00.000 время не заполняется, функцией CONVERT (date, GETDATE()) я выдираю дату
в итоге идеальный вариант это когда я буду задавать диапазоны вида dfOrdersProducts.OrderDateCalc >= <FILTER1> AND qdfOrdersProducts.OrderDateCalc < <FILTER2> где фильтр 1 это от и фильтр 2 до.
То есть если это например 01.09.2012 - 01.10.2012 То столбцов должно быть соответственно 31 где 31 столбец это столбец Товар
Можете пожалуйста конкретней. Я знаю одно точно. Нету дня без продажи, то есть будут все стобцы диапазона
5 окт 12, 20:32    [13276357]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Kimel,

Просто в Excel Это делается 3 щелчками, выбираю сводную таблицу, выбираю доход и товар, а дату перетягиваю как столбец и ВСЁ, помогите пожалуйста!!!!!!!!
5 окт 12, 20:39    [13276374]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
qwerty112
Guest
Kimel
Kimel,

Просто в Excel Это делается 3 щелчками, выбираю сводную таблицу, выбираю доход и товар, а дату перетягиваю как столбец и ВСЁ, помогите пожалуйста!!!!!!!!

делай в Экселе, чо ?
5 окт 12, 20:41    [13276379]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112,

Та вот незадача, это нужно автоматизировать так как вывод будет в HTML и excel просто не будет на компе. То есть нужно сделать средствами SQL
5 окт 12, 20:45    [13276386]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
kalimba
Member

Откуда:
Сообщений: 297
Kimel
qwerty112,

Та вот незадача, это нужно автоматизировать так как вывод будет в HTML и excel просто не будет на компе. То есть нужно сделать средствами SQL
Посмотрите в сторону Reporting Services.
5 окт 12, 20:49    [13276402]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
kalimba,

Не катит. У меня есть программа и там есть раздел отчёты где можно вставлять произвольный sql код. Пользователь может только с программой работать. Мне нужно просто составить запрос...
5 окт 12, 20:51    [13276411]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Kimel,

Я не могу поверить что то что в Excel делается в 3 щелчка в sql геморно. Я полюбому чё-то не учёл просветите плиз
5 окт 12, 20:56    [13276417]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
qwerty112
Guest
Kimel
Товар Доход Дата
Маска 10 10.12.2011
Очки Г-2 5.9 10.12.2011
Штангель 100 14.12.2011


А нужно сделать таблицу вида
Товар 10.12.2011 14.12.2011
Маска 10 NULL
Очки Г-2 5.9 NULL
Штангель NULL 100

--create table ##t (Товар varchar(10), Доход money, Дата datetime)
--
--set dateformat dmy
--
--insert into ##t 
--select 'Маска', 10, '10.12.2011' union all 
--select 'Очки Г-2', 5.9, '10.12.2011' union all
--select 'Штангель', 100, '14.12.2011' 

--select * from ##t

declare @SQL1 varchar(max)
declare @SQL varchar(max)

set @SQL1 = 
(select distinct 
	'['+left(convert(varchar, Дата, 120), 10)+'],' as 'data()' 
from ##t
where Дата between '20111201' and '20111231'
order by 1
for xml path(''))

set @SQL1 = left(@SQL1, len(@SQL1)-1)
	
print @SQL1	

set @SQL = 
'select Товар, '+@SQL1+'
from

(select Товар, left(convert(varchar, Дата, 120), 10) as xz, Доход
from ##t) a

pivot (sum(Доход) for xz in ('+@SQL1+')) pvt'

print @SQL

exec(@SQL)

Товар      2011-12-10            2011-12-14
---------- --------------------- ---------------------
Маска      10,00                 NULL
Очки Г-2   5,90                  NULL
Штангель   NULL                  100,00

(3 row(s) affected)
5 окт 12, 21:01    [13276431]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112,

Спасибо большое, ваш запрос работает на 100%, но я высё утрировал, дело в том что у меня есть запрос.
SELECT qdfOrdersProducts.ProductCalc ,SUM((SalePrice - qdfArrivalsProducts.Price) * qdfOrdersProducts.Quantity) AS 'Прибыль',
OrderDateCalc FROM qdfOrdersProducts
left outer JOIN qdfArrivalsProducts ON qdfOrdersProducts.ProductID = qdfArrivalsProducts.ProductID
left outer JOIN qdfOrders ON qdfOrdersProducts.OrderID = qdfOrders.ID
WHERE qdfOrdersProducts.OrderDateCalc >=
(select top 1 qdfArrivalsProducts.DocumentDateCalc
from qdfArrivalsProducts where ProductID = qdfOrdersProducts.ProductID order by DocumentDateCalc desc)

group by qdfOrdersProducts.ProductCalc,OrderDateCalc
order by OrderDateCalc

результатом которого и ЕСТЬ
ProductCalc Прибыль OrderDateCalc
Очки откидные круглые Китай 99,508 2012-10-03 00:00:00.000
Очки ЗП-12 без войлока 5,5 2012-10-05 00:00:00.000
Очки откидные круглые Китай 24,631 2012-10-05 00:00:00.000
Очки откидные прямоугольные Китай 29,508 2012-10-05 00:00:00.000

Как бы таблица. То есть данные у меня хранятся не в таблице а извлекаются благодаря запрос, а теперь сам вопрос. Как мне мой запрос приделать к вашему, попробовал где вставить в from результата 0.
5 окт 12, 21:13    [13276465]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
qwerty112
Guest
Kimel
qwerty112,

+
Спасибо большое, ваш запрос работает на 100%, но я высё утрировал, дело в том что у меня есть запрос.
SELECT  qdfOrdersProducts.ProductCalc ,SUM((SalePrice - qdfArrivalsProducts.Price) * qdfOrdersProducts.Quantity) AS 'Прибыль',
OrderDateCalc FROM qdfOrdersProducts
 left outer JOIN qdfArrivalsProducts  ON  qdfOrdersProducts.ProductID = qdfArrivalsProducts.ProductID 
 left outer JOIN qdfOrders ON qdfOrdersProducts.OrderID = qdfOrders.ID 
 WHERE qdfOrdersProducts.OrderDateCalc >= 
 (select top 1 qdfArrivalsProducts.DocumentDateCalc 
 from qdfArrivalsProducts where ProductID = qdfOrdersProducts.ProductID order by DocumentDateCalc desc) 

group by qdfOrdersProducts.ProductCalc,OrderDateCalc
order by OrderDateCalc


результатом которого и ЕСТЬ
ProductCalc ПрибыльOrderDateCalc
Очки откидные круглые Китай99,5082012-10-03 00:00:00.000
Очки ЗП-12 без войлока5,52012-10-05 00:00:00.000
Очки откидные круглые Китай24,6312012-10-05 00:00:00.000
Очки откидные прямоугольные Китай29,5082012-10-05 00:00:00.000


Как бы таблица. То есть данные у меня хранятся не в таблице а извлекаются благодаря запрос, а теперь сам вопрос. Как мне мой запрос приделать к вашему, попробовал где вставить в from результата 0.

везде, где в моём скрипте таб. ##t , вместо неё, вписываеш весь свой запрос (в скобках, разумеется и алиас в конце, типа так - ( ... ) t )

...даа, и фильтр по датам нужно делать в твоём запросе
5 окт 12, 21:25    [13276486]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112,

О боги. у меня это вышло. Я бы не додумался до альясов, я не знаю что это. Я вообще мало понимаю запрос но всё работает. Конечный вариант такой

declare @SQL1 varchar(max)
declare @SQL varchar(max)
set @SQL1 = 
(select distinct 
	'[' + left(convert(varchar, Дата, 120), 10) + '],' as 'data()' 
from (select  qdfOrdersProducts.ProductCalc as Товар,SUM((SalePrice - qdfArrivalsProducts.Price) * qdfOrdersProducts.Quantity) as Прибыль,
OrderDateCalc as Дата from qdfOrdersProducts
 left outer join qdfArrivalsProducts  on  qdfOrdersProducts.ProductID = qdfArrivalsProducts.ProductID 
 left outer join qdfOrders on qdfOrdersProducts.OrderID = qdfOrders.ID 
 where qdfOrdersProducts.OrderDateCalc >= 
 (select top 1 qdfArrivalsProducts.DocumentDateCalc 
 from qdfArrivalsProducts where ProductID = qdfOrdersProducts.ProductID order by DocumentDateCalc desc ) 
group by qdfOrdersProducts.ProductCalc,OrderDateCalc) t
for xml path(''))
set @SQL1 = left(@SQL1, len(@SQL1)-1)
set @SQL = 
'SELECT Товар, ' + @SQL1 + '
from
(select Товар, left(convert(varchar, Дата, 120), 10) as xz, Прибыль
from (select  qdfOrdersProducts.ProductCalc as Товар,SUM((SalePrice - qdfArrivalsProducts.Price) * qdfOrdersProducts.Quantity) as Прибыль,
OrderDateCalc as Дата from qdfOrdersProducts
 left outer join qdfArrivalsProducts  on  qdfOrdersProducts.ProductID = qdfArrivalsProducts.ProductID 
 left outer join qdfOrders on qdfOrdersProducts.OrderID = qdfOrders.ID 
 where qdfOrdersProducts.OrderDateCalc >= 
 (select top 1 qdfArrivalsProducts.DocumentDateCalc 
 from qdfArrivalsProducts where ProductID = qdfOrdersProducts.ProductID order by DocumentDateCalc desc ) 
group by qdfOrdersProducts.ProductCalc,OrderDateCalc) t) a
pivot (sum(Прибыль) for xz in (' + @SQL1 + ')) pvt'
exec(@SQL)


Единственная проблема что в Студии Mssql без проблем всё. А вот когда в программу вставляю пишет ошибку типа вы указали не существующую таблицу... Это очень жаль значит всё зря. Хотя если можно создать что-то типа функции и обращаться к ней то это гуд.. А нет, вот придумал, а как это сделать в виде представления. То есть создать представление в котором вся эта каша будет и я смогу видеть изменения в реальном времени, подскажите пожалуйста
5 окт 12, 21:42    [13276529]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Да и вот ещё что Программа поддерживает VBS скрипты, мб там можно как-то реализовать
5 окт 12, 21:47    [13276541]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Kimel
А вот когда в программу вставляю пишет ошибку типа вы указали не существующую таблицу...
Какую еще такую программу?
Kimel
Хотя если можно создать что-то типа функции и обращаться к ней то это гуд.. А нет, вот придумал, а как это сделать в виде представления. То есть создать представление в котором вся эта каша будет и я смогу видеть изменения в реальном времени, подскажите пожалуйста
Только процедуру.
5 окт 12, 21:53    [13276553]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Гавриленко Сергей Алексеевич,

Программа http://www.simple-soft.ru/ProductsCount.htm
5 окт 12, 22:09    [13276603]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Kimel,

Скажите а можно ли создать какой-то батник или скрипт что бы при нажатии выполнялся запрос а результат в csv сохранялся, и если можн ото как?
5 окт 12, 22:12    [13276612]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
qwerty112
Guest
Kimel
Программа http://www.simple-soft.ru/ProductsCount.htm

гыыы )) популярная, ёлы, программа, - в Аксе тоже раза 3-и всплывала

Kimel
Kimel,

Скажите а можно ли создать какой-то батник или скрипт что бы при нажатии выполнялся запрос а результат в csv сохранялся, и если можн ото как?

в этой жизни, вообще, - мало невозможного ...

но давай сначала "от простого" :
- можеш ты создать функцию (функцию - в понимании скл сервера) ? можно из "программы" вызывать запрос с функцией ?

если можно, то проще будет сделать инлайн функцию, в которую будет передаватся год/месяц, для которого делается отчет, и пользоватся ей
5 окт 12, 22:24    [13276640]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112,

Я думаю там функции пашут. Но я не имел с ними дела за ненадобностью, можете помочь составить функцию я её вставлю и сразу проверю?
5 окт 12, 22:38    [13276690]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
qwerty112
Guest
Kimel
qwerty112,

Я думаю там функции пашут. Но я не имел с ними дела за ненадобностью, можете помочь составить функцию я её вставлю и сразу проверю?

create function dbo.test (@a int)
returns table
as
return	select @a as a


а так провериш
select * from dbo.test(100500)
5 окт 12, 22:45    [13276710]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112,

со студии пашет, в программе пишет
таблица test() указанная в части FROM выражения sql не существует в базе ((( это наверное плохо
5 окт 12, 22:52    [13276745]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112,

Послушайте, что если сделать представление на основе функции, а потом создавать отчёт в программе простым select запросом из представления??????
5 окт 12, 23:01    [13276793]     Ответить | Цитировать Сообщить модератору
 Re: Нужно перевести строки в названия стобцов  [new]
qwerty112
Guest
Kimel
qwerty112,

со студии пашет, в программе пишет
таблица test() указанная в части FROM выражения sql не существует в базе ((( это наверное плохо

ага

----
а вьюху, ты говориш, можно использовать ?
можно сделать вью, которое будет возвращать такой отчет за последние столько-то дней (30 или 50 или 150 - это не суть важно)
5 окт 12, 23:06    [13276814]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить