【问题标题】:SQL declare variable for a long and repetitive selectSQL 为长且重复的选择声明变量
【发布时间】:2013-06-18 21:11:12
【问题描述】:

我想声明一个变量并执行以下操作:

Select     
cast (SUM(case when @Dummy is not null then 1 else 0 end)*1.0/443321 as decimal(10,5)) @Dummy    
FROM hellotable
WHERE @Dummy in ("100 different field names in hellotable")

但是这不起作用...任何帮助表示赞赏。

【问题讨论】:

  • 基本上我可以用不同的字段名称复制和粘贴相同的选择超过 100 次,但我认为这不是一个好方法。

标签: sql sql-server tsql variables declare


【解决方案1】:

尝试通过动态 SQL 来执行此操作..

DECLARE @dummy sysname
DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = 'SELECT  CAST (SUM(CASE WHEN '+ @Dummy +N' IS NOT NULL THEN 1
                       ELSE 0
                  END) * 1.0 / 443321 AS DECIMAL(10, 5)) '+ @Dummy +N'     
                FROM    hellotable
                WHERE   '+ @Dummy +N'  IN ( '' )'
EXEC (@SQL)

【讨论】:

  • 感谢您的帮助。但有错误:必须声明标量变量“@SQL”。
【解决方案2】:

尝试使用临时表来填充这些数据,然后使用主表进行用户内部联接,而不是在 WHERE 子句中使用 IN。

CREATE TABLE #TempTable (FieldFromHelloTable nvarchar(50))

INSERT INTO #TempTable
VALUES ('value1'),('value2'),('value3'),('value4'),('value5')

SELECT * --this is oversimplified to ilustrate the point and you can modify this further
FROM HelloTable H
inner join #TempTable Tmp on H.SomeField = Tmp.FieldFromHelloTable

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多