2015-10-19 3 views
1

Привет, у меня есть большая проблема с pivot ISNULL. Я пытаюсь преобразовать многие темы в свой код, но я не смог с этим справиться. Его мой код с ошибкой:SQL pivot need fill 0

DECLARE @PivotColumnHeaders VARCHAR(MAX); 

    SET @PivotColumnHeaders=''; 

SELECT @PivotColumnHeaders [email protected] + '[' + CONVERT(VARCHAR,Magazyn1) + '],' 
FROM 
(  
    Select DISTINCT Pro.SC03002 as Magazyn1 
    From SC030700 as Pro 
) as Topa 

SET @PivotColumnHeaders = LEFT(ISNULL(@PivotColumnHeaders,0),LEN(@PivotColumnHeaders)-1) 
    DECLARE @Column VARCHAR(MAX); 
    set @Column =SUBSTRING((select distinct ',IsNull(['+SC03003+'],0) as ['+SC03003+']' from SC030700 for xml path('')),2,8000) 
    DECLARE @cmd VARCHAR(MAX); 

-msg 8114, уровень 16, состояние 5, строка 284 (набор @column) Ошибка преобразования типа данных VARCHAR в числовой.

SET @cmd=' 
SELECT Pro.SC03001 , '[email protected]+' 
FROM 
(      
    Select Pro.SC03001 , Pro.SC03002, Pro.SC03003 
    From SC030700 as Pro 
) AS myProducts 
PIVOT (SUM(SC03003) FOR SC03002 IN ('[email protected]+')) dynamicpivot ' 
EXECUTE (@cmd) 
+0

Каковы значения этих двух переменных при его выполнении или содержании CMD? –

+0

Как я могу проверить это? У нас нет встроенного отладчика. Я знаю, как отлаживать только в VS. – Vanguard1990

+0

Meyby существует простой намек на заполнение нулей? :) – Vanguard1990

ответ

0

Вы должны отбрасывать эти числовые столбцы VARCHAR явно, так что вы можете объединить их в строку:

set @Column =SUBSTRING((select distinct ',IsNull(['+CAST(SC03003 AS varchar(31))+'],0) as [SC03003]' from SC030700 for xml path('')),2,8000) 
+0

Проделайте ту же самую ошибку – Vanguard1990

+0

oops, да, я исправил ее. –

+0

Его, неправильно :) В ролях хорошо, но я не могу преобразовать. – Vanguard1990

0

попробовать литье колонну SC03003 к VARCHAR, так как вы добавляете его в строковое значение ,

set @Column =SUBSTRING((select distinct ',IsNull(['+ CONVERT(VARCHAR, SC03003)+'],0) as [' + CONVERT(VARCHAR, SC03003) +']' from SC030700 for xml path('')),2,8000)