2017-12-20 9 views
-1

私は、SQLストアプロシージャまたはASP.netの組み合わせの組み合わせを使用して、次の組み合わせ図を作成したいと考えています。複数選択オプションのSQLまたはMVCでコンビネーションロジックを書き込む最良の方法

combination diagram

図における各フィールドは4つの組み合わせを有します。だから、それは合計20の組み合わせになります。私は、SQLサーバまたはC#にelse文があれば20を書いてはいけません。

ここにロジックのUIがあります。 image describtion

ユーザーは、見積もりを選択したり、20の組み合わせを選択することができます。私は20のelse文を書いてはいけません。

SQLやC#で文を書く方が良いですか?

たとえば、 ユーザーは、見積り番号または代理店名、開始日または終了日、または2つ以上のフィールドの組み合わせから選択できます。

アルゴリズムを書く最も良い方法は何ですか?ここ は終了日だけでは日

、4-検索を開始することによってのみ庁はありません

、3-で検索のみ引用なし

2 - で検索を組み合わせ

1 - 検索で

、5-だけませ

6契約しないで検索 -ません

引用なし+庁

7 - 引用なし+開始日

8 - 引用なし+終了日

9 - すべてのフィールドを使用すると、この方法によって達成することができますSQL側から

+0

。 'IQueryable data = db.T; (agencyName.HasValue){データ= data.Where(X => x.AgencyName == agencyName.Value) 'などは、あなたが20個の組み合わせを意味するものではありません –

+1

場合は、むしろそれは、4^5つのので、1024の組み合わせです。 –

答えて

-1

によって選択:

SELECT * FROM Qoutes AS q 
WHERE (q.QoutationNo = @QoutationNo OR @QoutationNo IS NULL) 
AND (q.AgencyName = @AgencyName OR @AgencyName IS NULL) 
AND (q.StartDate = @StartDate OR @StartDate IS NULL) 
AND (q.EndDate = @EndDate OR @EndDate IS NULL) 
AND (q.Term = @Term OR @Term IS NULL) 

Webページから選択されていない場合はNULL値を渡します。

+0

すべての組み合わせでうまくいくのですか? –

+0

主に動作します... 引用符番号、見積書番号、代理店名などの組み合わせで動作します 引用番号または代理店名のようなor節では機能しませんでした – Mittal

+0

どのようにすべての組み合わせで動作させることができますか –

0

私は多くのフィルタを使用して検索を実行しようとしていたが、しばらく前に同様の問題が発生しました。私が見つけた最良の解決策は、ステートメントがパラメータに基づいて構築された動的SQLクエリを使用することでした。

SQL文のselect句は、静的が、句と句はパラメータに基づいているからです。あなただけの場でクエリを作成

CREATE PROCEDURE dbo.SearchQuotation 
(
    @QuotationNo INT, 
    @AgencyName VARCHAR(50), 
    @StartDate DATETIME, 
    @EndDate DATETIME, 
    @Term INT 
) 
AS 
    BEGIN 
     DECLARE @SQL NVARCHAR(4000) 
     SELECT @SQL = N'SELECT * FROM Quotations WHERE 1 = 1' 

     DECLARE @ParametersDefinition NVARCHAR(4000) 
     SELECT @ParametersDefinition = N'@QuotationNoParameter INT, 
             @AgencyNameParameter VARCHAR(50), 
             @StartDateParameter DATETIME, 
             @EndDateParameter DATETIME, 
             @TermParameter INT' 

     IF @QuotationNo IS NOT NULL 
      SELECT @SQL = @SQL + N' AND QuotationNo = @QuotationNoParameter ' 

     IF @AgencyName IS NOT NULL 
      SELECT @SQL = @SQL + N' AND AgencyName = @AgencyNameParameter ' 

     IF @StartDate IS NOT NULL 
      SELECT @SQL = @SQL + N' AND StartDate = @StartDateParameter ' 

     IF @EndDate IS NOT NULL 
      SELECT @SQL = @SQL + N' AND EndDate = @EndDateParameter ' 

     IF @Term IS NOT NULL 
      SELECT @SQL = @SQL + N' AND Term = @TermParameter ' 

     EXECUTE sp_executesql 
       @SQL, 
       @ParametersDefinition, 
       @QuotationNoParameter = @QuotationNo, 
       @AgencyNameParameter = @AgencyName, 
       @StartDateParameter = @StartDate, 
       @EndDateParameter = @EndDate, 
       @TermParameter = @Term 

    END 
+0

「@SQL」の近くで誤った構文としてエラーが発生しています。クエリを実行することができません –

+0

私は自分のDB上でそれを試して、それが動作します、ページを更新して、もう一度やり直してください。私の場合は問題なく動作しますので、あなたのDBに間違ったことが起こっていると思います。 –

関連する問題