原點表
| 所以 | So_Line | 所以其他 |
|---|---|---|
| 美國廣播公司 | 2 | rrr35 |
| BDC | 2 | rrr35 |
結果表
| 所以 | So_Line | 所以其他 |
|---|---|---|
| ABC-1 | 2 | rrr35 |
| ABC-2 | 2 | rrr35 |
| ABC-3 | 2 | rrr35 |
| ABC-4 | 2 | rrr35 |
| ABC-5 | 2 | rrr35 |
| BDC-1 | 2 | rrr35 |
| BDC-2 | 2 | rrr35 |
它沒有這樣作業
DECLARE @MyVariable VARCHAR(max);
SET @MyVariable = 'So,So_Line,So_other';
SELECT CONCAT(So, t.x) AS @MyVariable
FROM [test].[dbo].[foo]
CROSS JOIN (VALUES('-1'),('-2'),('-3'),('-4'),('-5')) t(x)
WHERE So = 'ABC'
UNION
SELECT CONCAT(So, t.x) AS @MyVariable
FROM [test].[dbo].[foo]
CROSS JOIN (VALUES('-1'),('-2')) t(x)
WHERE So = 'BDC'
但它確實是這樣作業的:
SELECT CONCAT(So, t.x) AS So, So_Line, So_other
FROM [test].[dbo].[foo]
CROSS JOIN (VALUES('-1'),('-2'),('-3'),('-4'),('-5')) t(x)
WHERE So = 'ABC'
UNION
SELECT CONCAT(So, t.x) AS So, So_Line, So_other
FROM [test].[dbo].[foo]
CROSS JOIN (VALUES('-1'),('-2')) t(x)
WHERE So = 'BDC'
該表只是示例,我處理的表有 300 列,我不能只在 as 之后添加,所以我想我可以創建一個變數。
但它沒有在附近作業@MyVariable,有人可以幫助我嗎?
uj5u.com熱心網友回復:
變數是一個值持有者,因此 SQL Server 會相應地處理它。
要獲得所需的結果,您應該進行動態查詢。
DECLARE @MyVariable VARCHAR(max);
SET @MyVariable = 'So,So_Line,So_other';
DECLARE @Dynamic_Query NVARCHAR(MAX)
SET @Dynamic_Query=' SELECT CONCAT(So, t.x) as [' @MyVariable ']
FROM [test].[dbo].[foo] CROSS JOIN (VALUES(''-1''),(''-2''),(''-3''),(''-4''),(''-5'')) t(x) WHERE So = ''ABC''
Union
SELECT CONCAT(So, t.x)
FROM [test].[dbo].[foo] CROSS JOIN (VALUES(''-1''),(''-2'')) t(x) WHERE So = ''BDC'''
exec(@Dynamic_Query)
謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524790.html
上一篇:動態Where子句
