0

SQL Server を使用して作業しているクエリについて少し助けが必要です。

クエリは、特定のカテゴリの検索フィールド情報を取得し、それを使用して、そのカテゴリ内のプロファイルの数で並べ替えられたプロファイルのリストを返します。

wn.sqlcheck フィールドに含まれる情報を使用してクエリを実行する必要があります。次に、sectionCount で並べ替えます。

クエリ

SELECT wc.name,
   (SELECT count(*) FROM facilities WHERE wc.sqlcheck) AS sectionCount
FROM webcategories wc
WHERE wc.parentid = 1
ORDER BY sectionCount

webcategories の例

parentid | name           | sqlcheck 
-----------------------------------------
1        | categorytitle  | (highcaretotalnumberbeds > 0 AND highcaredoubleroomsyn = 1)
1        | categorytitle2 | (othernumberbeds > 0 AND otherdoubleroomsyn = 1)

現在、ストアド プロシージャを使用しています

SET @sqlcheck = (select sqlcheck from webcategories where parentid=1)

EXEC('SELECT wc.id, wc.name,
   (SELECT count(id) FROM facilities WHERE '+@sqlcheck+') AS sectionCount
FROM webcategories wc
WHERE wc.parentid = 1
ORDER BY sectionCount')

このエラーが発生します:

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

これは、parentid = 1 のサブクエリから複数の行が返されるためです。

webcategories テーブルから返されたすべての結果をループする方法については、まだ助けが必要です。とても有難い :)

4

2 に答える 2

1

実際には、 sp_executesqlを使用する必要があります。詳細な例は、http: //msdn.microsoft.com/en-us/library/ms188001 (v=sql.100).aspx にあります。

カーソルを使用してループする方法は次のとおりです (高速バージョン)。

DECLARE @catName varchar(100), @sqlCheck varchar(max)

DECLARE webcat_cursor CURSOR FAST_FORWARD READ_ONLY FOR 
SELECT name, sqlcheck
FROM webcategories
WHERE parentId = 1
ORDER BY sectionCount

OPEN webcat_cursor

FETCH NEXT FROM webcat_cursor
INTO @catName, @sqlCheck

WHILE @@FETCH_STATUS = 0
BEGIN
    --the query to be executed
    --I have taken it from one of the answers
    EXEC('SELECT wc.' + @catName + ',
       (SELECT count(*) FROM facilities WHERE ' + @sqlCheck + ') AS sectionCount    
    FROM webcategories wc
    WHERE wc.parentid = 1
    ORDER BY sectionCount')
    --end of executed query

    FETCH NEXT FROM webcat_cursor 
    INTO @catName, @sqlCheck
END

CLOSE webcat_cursor
DEALLOCATE webcat_cursor
于 2012-05-07T05:20:20.440 に答える
1

このように試すことができます

  declare  @name  varchar(100)
    set @name=(select name from webcategories where parentid=1 )
    declare  @sqlcheck  varchar(100)
    set @sqlcheck=(select sqlcheck from webcategories where parentid=1 )

    exec('SELECT wc.'+@name+',
       (SELECT count(*) FROM facilities WHERE '+@sqlcheck+') AS sectionCount
    FROM webcategories wc
    WHERE wc.parentid = 1
    ORDER BY sectionCount')
于 2012-05-07T06:39:49.883 に答える