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

Откуда: Украина
Сообщений: 334
Вариант ISNULL(blabla,'') не катит, нельзя использовать ни одинарные не двойные скобки, ТАК КАК всё выражение УЖЕ в НИХ! вот запрос.
+
use S4LadIcks12
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
 
 union 
 
 select qdfSalesProducts.ProductCalc as Товар, 
 SUM((SalePrice - qdfArrivalsProducts.Price) * qdfSalesProducts.Quantity) as Прибыль,
 qdfSalesProducts.DocumentDateCalc as Дата 
 
 from qdfSalesProducts 
 left outer join qdfArrivalsProducts  on  qdfSalesProducts .ProductID = qdfArrivalsProducts.ProductID 
 left outer join qdfSales on qdfSalesProducts.SaleID = qdfSales.ID 
 where qdfSalesProducts.DocumentDateCalc >= 
 (select top 1 qdfArrivalsProducts.DocumentDateCalc from 
 qdfArrivalsProducts where ProductID = qdfSalesProducts.ProductID order by DocumentDateCalc desc ) 
 
 group by qdfSalesProducts.ProductCalc,qdfSalesProducts.DocumentDateCalc
 ) 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
 
 union 
 
 select qdfSalesProducts.ProductCalc as Товар, 
 SUM((SalePrice - qdfArrivalsProducts.Price) * qdfSalesProducts.Quantity) as Прибыль,
 qdfSalesProducts.DocumentDateCalc as Дата 
 
 from qdfSalesProducts 
 left outer join qdfArrivalsProducts  on  qdfSalesProducts .ProductID = qdfArrivalsProducts.ProductID 
 left outer join qdfSales on qdfSalesProducts.SaleID = qdfSales.ID 
 where qdfSalesProducts.DocumentDateCalc >= 
 (select top 1 qdfArrivalsProducts.DocumentDateCalc from 
 qdfArrivalsProducts where ProductID = qdfSalesProducts.ProductID order by DocumentDateCalc desc ) 
 
 group by qdfSalesProducts.ProductCalc,qdfSalesProducts.DocumentDateCalc) t) a
pivot (sum(Прибыль) for xz in (' + @SQL1 + ')) pvt'
exec(@SQL)
6 окт 12, 16:34    [13277763]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37138
exec ('select isnull(null, '''')')
6 окт 12, 16:38    [13277767]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Kimel
Member

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

Я не понимаю куда вставить, когда я сделал так

exec ('select isnullSUM((SalePrice - qdfArrivalsProducts.Price) * qdfOrdersProducts.Quantity), '''')')

в селект запросе то ошибку дало, объясните конкретней
6 окт 12, 16:41    [13277769]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Kimel
Member

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

Ну так что никто не знает?
6 окт 12, 16:56    [13277785]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Kimel,
isnull(SUM
6 окт 12, 17:07    [13277802]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Всё извиняюсь. Вопрос поставлен не правильно.
Есть локальная переменная результат вывода который например такой.
Товар 2012-10-04 2012-10-06
Лампы Xenon (пара) H27(880) 5000K (запасные) 1056.2 NULL
Очки 0276Д VITA (cинее стекло) NULL 20



Этот результат выводиться командой
exec(@SQL)

А теперь вопрос. Как УЖЕ В РЕЗУЛЬТАТЕ заменить NULL на пусто значение

Извиняюсь за плохо поставленный вопрос. В BOL ничего не нашёл
6 окт 12, 17:29    [13277817]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Exproment
Member

Откуда:
Сообщений: 416
Kimel, лучше в самом динамическом SQL вставить проверки вида:
exec ('select isnull(1, '''')');
exec ('select isnull(null, '''')');
6 окт 12, 17:33    [13277826]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
А зачем это нужно?
Обычно это приложение должно решать, как ей выводить ей null: в виде строки "null" или в виде пусто.
6 окт 12, 17:34    [13277827]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Во первых. Сложилась такая ситуация что толком -то проверять можно только результирующий набор. Во вторых приложение решает что там где значения нету поставить NULL, я не знаю где это поменять.
Сейчас я делаю так. Вручную сохраняю результат в csv в excel заменяю NULL на пустое значение.
Нужно что бы результат переменной сохранялся в таблицу, можно даже временную. Но вот такая проблема. Я НЕ ЗНАЮ СКОЛЬКО столбцов в будуйщей таблице так как запрос ДИНАМИЧЕСКИЙ. Так что это сейчас главная задача. Впихнуть этот запрос в таблицу, а потом просто сделать запрос вида select isnull(*,'') и всё
6 окт 12, 17:44    [13277835]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Вот конкретный ПИВОТ запрос
SELECT Товар, [2012-10-04], [2012-10-06] 
 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    
 union      
 select qdfSalesProducts.ProductCalc as Товар,    
SUM((SalePrice - qdfArrivalsProducts.Price) * qdfSalesProducts.Quantity) as Прибыль,   qdfSalesProducts.DocumentDateCalc as Дата       

from qdfSalesProducts    left outer join qdfArrivalsProducts  on  qdfSalesProducts .ProductID = qdfArrivalsProducts.ProductID    left outer join qdfSales on qdfSalesProducts.SaleID = qdfSales.ID   

where qdfSalesProducts.DocumentDateCalc >=    (select top 1 qdfArrivalsProducts.DocumentDateCalc from    qdfArrivalsProducts where ProductID = qdfSalesProducts.ProductID order by DocumentDateCalc desc )      

 group by qdfSalesProducts.ProductCalc,qdfSalesProducts.DocumentDateCalc) t) 
 
a  pivot (sum(Прибыль) for xz in ([2012-10-04], [2012-10-06])) pvt



Примечательно ТО что ВСЁ что берёться с настоящих таблиц НЕ NULL по этому ставить проверку на значения селекта смысла нет. Нужно именно на саму часть ПИВОТ поставить проверку изнулл Но у меня НЕ ВЫХОДИТ помогите плиз
6 окт 12, 18:08    [13277863]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
nezhadnye_my
Guest
SELECT Товар, ISNULL([2012-10-04], 0) AS [2012-10-04] , ISNULL([2012-10-06], 0) AS [2012-10-06]
 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    
 union      
 select qdfSalesProducts.ProductCalc as Товар,    
SUM((SalePrice - qdfArrivalsProducts.Price) * qdfSalesProducts.Quantity) as Прибыль,   qdfSalesProducts.DocumentDateCalc as Дата       

from qdfSalesProducts    left outer join qdfArrivalsProducts  on  qdfSalesProducts .ProductID = qdfArrivalsProducts.ProductID    left outer join qdfSales on qdfSalesProducts.SaleID = qdfSales.ID   

where qdfSalesProducts.DocumentDateCalc >=    (select top 1 qdfArrivalsProducts.DocumentDateCalc from    qdfArrivalsProducts where ProductID = qdfSalesProducts.ProductID order by DocumentDateCalc desc )      

 group by qdfSalesProducts.ProductCalc,qdfSalesProducts.DocumentDateCalc) t) 
 
a  pivot (sum(Прибыль) for xz in ([2012-10-04], [2012-10-06])) pvt

?
6 окт 12, 21:54    [13278631]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Kimel
Member

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

Всё равно NULL значения есть, я это тем более уже пробовал
7 окт 12, 02:34    [13279454]     Ответить | Цитировать Сообщить модератору
 Re: Как заменить NULL пустым значением без скобок  [new]
Exproment
Member

Откуда:
Сообщений: 416
Kimel, В ваших не отформатированных исходниках никто разбираться не будет. напишите аналогичный упрощенный, правильно отформатированный пример.

Но вариант у вас 1(!!!) - окутывать в isnull весь результирующий набор в динамическом sql => никаких null'ов тогда быть не может!!! должно получится так:
select isnull(выражение),
          isnull(выражение),
          isnull(выражение),
          isnull(...)
from   (xml вроде у вас) 

- вот что в итоге у вас должно быть в динамическом sql вне зависимости от того что вы еще в него вставите.
7 окт 12, 16:32    [13280452]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить