English 中文(简体)
页: 1 纸张错误使用变量给yn子错误
原标题:SQL Pivot table error-using variable gives syntax error

Hi my coworker came to me with this error and now I am hooked and trying to figure it out, hope some of the experts can help us! Thanks so much! When I execute Step6 we get this error:

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near  @cols .

--Sample of pivot query

--Creating Test Table Step1
CREATE TABLE Product(Cust VARCHAR(25), Product VARCHAR(20), QTY INT)
GO
-- Inserting Data into Table Step2
INSERT INTO Product(Cust, Product, QTY)
VALUES( KATE , VEG ,2)
INSERT INTO Product(Cust, Product, QTY)
VALUES( KATE , SODA ,6)
INSERT INTO Product(Cust, Product, QTY)
VALUES( KATE , MILK ,1)
INSERT INTO Product(Cust, Product, QTY)
VALUES( KATE , BEER ,12)
INSERT INTO Product(Cust, Product, QTY)
VALUES( FRED , MILK ,3)
INSERT INTO Product(Cust, Product, QTY)
VALUES( FRED , BEER ,24)
INSERT INTO Product(Cust, Product, QTY)
VALUES( KATE , VEG ,3)
GO
-- Selecting and checking entires in table Step3
SELECT *
FROM Product
GO
-- Pivot Table ordered by PRODUCT Step4

select *
FROM (
SELECT *
FROM Product) up
PIVOT (SUM(QTY) FOR CUST IN ([FRED], [KATE])) AS pvt
ORDER BY PRODUCT
GO

--dynamic pivot???? Step5

DECLARE @cols NVARCHAR(2000)
select @cols =   STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                 ],[  + b.Cust
                        FROM    (select top 100 Cust
        from tblProduct)b
                        ORDER BY  ],[  + b.Cust
                        FOR XML PATH(  )
                      ), 1, 2,   ) +  ] 

--Show Step6

SELECT *
FROM (SELECT *
FROM tblProduct) p
PIVOT (SUM(QTY) FOR CUST IN (@cols)) as pvt
Order by Product
问题回答

很遗憾,你们需要充满活力才能做到这一点。

declare @dyn nvarchar(max)
set @dyn =  SELECT *
FROM (SELECT *
FROM Product) p
PIVOT (SUM(QTY) FOR CUST IN (   +  @cols + )) as pvt
Order by Product
 
exec sp_executesql @dyn

@Martin Smith将正确......当你发现下一个错误时。

关于@cols附近的错误,我认为你只能总结括号中的全部错误。 例如:

select @cols = (
                   STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                 ],[  + b.Cust
                           FROM    (select top 100 Cust
                                    from tblProduct)b
                           ORDER BY  ],[  + b.Cust
                           FOR XML PATH(  )
                        ), 1, 2,   ) +  ] 
               )




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签