0

それはほんの一例です。(私のポイントは、CASE ステートメントで複数の結果が得られた場合にどうすればよいかということです):

SELECT 
,@PARAM AS id 
,Date=( 
SELECT distinct CASE
    WHEN P.DATE1 <= 05 and P.DATE2 <= 10
    THEN 'X'
    WHEN P.DATE1 > 05 and P.DATE2 <= 10
    THEN 'Y
    WHEN P.DATE2 > 10
    THEN 'Z' 
 END )
 FROM Prod AS P

エラーは次のとおりです。

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

4

3 に答える 3

1

おそらくサブセレクト/サブクエリは必要ありません。おそらくケースが必要なだけです。

SELECT 
,@PARAM AS id 
,(CASE
    WHEN P.DATE1 <= 05 and P.DATE2 <= 10
    THEN 'X'
    WHEN P.DATE1 > 05 and P.DATE2 <= 10
    THEN 'Y
    WHEN P.DATE2 > 10
    THEN 'Z' 
 END) AS Date
 FROM Prod AS P

あなたのエラーはDate = (SELECT ...)、(P の行ごとに) クエリを実行し、Date に設定するために 1 つの列と行を返す必要があるためです。

于 2015-01-27T15:05:47.423 に答える
1

サブクエリが複数の行を返しています。フィルタリングするか、それに TOP 1 を追加して、1 つの列を含む 1 つの行を返すように変更する必要があります。例えば:

,Date=( 
SELECT distinct CASE
  WHEN P.DATE1 <= 05 and P.DATE2 <= 10
  THEN 'X'
  WHEN P.DATE1 > 05 and P.DATE2 <= 10
  THEN 'Y
  WHEN P.DATE2 > 10
  THEN 'Z' 
END 
WHERE -- >> your filter here <<
)

また

,Date=( 
SELECT TOP 1 distinct CASE
  WHEN P.DATE1 <= 05 and P.DATE2 <= 10
  THEN 'X'
  WHEN P.DATE1 > 05 and P.DATE2 <= 10
  THEN 'Y
  WHEN P.DATE2 > 10
  THEN 'Z' 
END )

場合は、各行で返す値を定義するだけで、多数の行を単一の値に置き換えることはありません。

于 2015-01-27T15:03:30.253 に答える