1

多くの選択肢を持つダイアログの結果を返すために使用される大きなストアド プロシージャがあります。特定のビット列が true に設定されている場合に「余分な」行を取得する新しい基準があります。現在のセットアップは次のようになります。

SELECT
  CustomerID,
  FirstName,
  LastName,
  ...
FROM HumongousQuery hq
LEFT JOIN (
    -- New Query Text
) newSubQuery nsq ON hq.CustomerID = nsq.CustomerID

新しいクエリの前半があります。

SELECT DISTINCT 
    c.CustomerID,
    pp.ProjectID,
    ep.ProductID
FROM Customers c
JOIN Evaluations e (NOLOCK)
    ON c.CustomerID = e.CustomerID
JOIN EvaluationProducts ep (NOLOCK)
    ON e.EvaluationID = ep.EvaluationID
JOIN ProjectProducts pp (NOLOCK)
    ON ep.ProductID = pp.ProductID
JOIN Projects p
    ON pp.ProjectID = p.ProjectID
WHERE 
    c.EmployeeID = @EmployeeID
    AND e.CurrentStepID = 5
    AND p.IsComplete = 0

Projects テーブルにはビット列 AllowIndirectCustomers があり、値が true の場合、このプロジェクトが追加の顧客を使用できることを示しています。私が知る限り、さまざまな SQL 構造の大部分は、結果セットに列を追加することを目的としています。UNION コマンドのさまざまな順列を試しましたが、うまくいきませんでした。通常、私はテーブル値関数に目を向けますが、このシナリオでは機能させることができませんでした。

これは私にとってスタンパーでした。何か案は?

4

2 に答える 2

0

テーブルの複雑さによっては、これは簡単にはうまくいかないかもしれませんがcase、列に対してステートメントを実行することはできbitます。このようなもの:

select table1.id, table1.value, 
case table1.flag 
    when 1 then 
        table2.value
    else null
end as secondvalue
from table1
left join table2 on table1.id = table2.id

ここにSQL Fiddleのデモがあります

于 2013-09-20T21:04:59.370 に答える