SQL查询帮助!使用选择多个

时间:2014-04-02 12:11:50

标签: sql sql-server

我正在尝试查询允许我使用SELECT语句引入多个字段的数据。下面是我的代码:(适用于一个特定字段 - [PDN005_Err]。如何从仅查看005到PDN005-PDN122,而不必将其硬编码到那里?

非常感谢任何帮助!

SELECT *
FROM OpenQuery(INSQL,
'
SELECT [DateTime], [PDN005_Err], [PDN005_Loc]
FROM Runtime.dbo.WideHistory
WHERE [DateTime] >= ''2014-03-01''
AND [DateTime] <= ''2014-04-01''
AND [PDN005_Err] = 1
ORDER BY [DateTime]
'
)

我正在尝试查询允许我使用SELECT语句引入多个字段的数据。下面是我的代码:(适用于一个特定字段 - [PDN005_Err]。如何从仅查看005到PDN005-PDN122,而不必将其硬编码到那里?

非常感谢任何帮助!

所以作为更新,这是我试过的..

SELECT *
FROM OpenQuery(INSQL,
    '
SELECT [DateTime], [AGC005_ErrCond], [AGC003_ErrCond], [AGC005_Loc], [AGC003_Loc]
FROM Runtime.dbo.WideHistory
WHERE [DateTime] >= ''2014-03-01''
AND [DateTime] <= ''2014-04-01''
AND ([AGC005_ErrCond] = 1
OR [AGC003_ErrCond] = 1)
ORDER BY [DateTime]
    '
)

但是,当我收到数据时......我正在寻找的值是1.但是......数据将一直重复,直到其中一个PDN Err = 1.这里附有数据图片所以你可以看到。

3 个答案:

答案 0 :(得分:0)

使用information_schema.colums视图生成列列表

select column_name+',' from information_schema.colums
where table_name='WideHistory'

答案 1 :(得分:0)

我建议采用以下方法。首先声明一个变量来保存列列表。

declare @ColumnList as varchar(max)

然后使用循环填充它。

然后将其添加到另一个变量。

@EntireQuery = 'select * from openquery(
INDSQL, ''select etc ' + @ColumnList + 
' from etc '')'

然后运行您的查询:

exec sp_executesql @EntireQuery

请注意,使用这种方法,您需要比现在更多的单引号。

答案 2 :(得分:0)

试试这个:

DECLARE @data varchar(max)

;WITH x as
(
  SELECT number FROM master..spt_values WHERE number between 1 and 122 and type = 'P'
)
SELECT @data = 'SELECT [DateTime]'+ ( 
        SELECT ',[PDN'+right(cast(number+1000 as char(4)), 3) + '_Err]'
        FROM x
        for xml path(''), type 
    ).value('.', 'varchar(max)') + ',[PDN005_Loc]
FROM Runtime.dbo.WideHistory
WHERE [DateTime] >= ''''2014-03-01''''
AND [DateTime] <= ''''2014-04-01''''
AND [PDN005_Err] = 1
ORDER BY [DateTime]'

exec( 'SELECT *
FROM OpenQuery([INSQL],'''+@data + ''')')

注意我同意@ThorstenKettner的评论,即对列进行硬编码会更好。

您应该知道OpenQuery中查询varchar的最大长度是8 KB。