0

誰かが私の既存のクエリを変更し、以下にリストされている私の2つの条件に基づいてコピーアンドペーストするためのSQLを提供してくれることを望んでいます。よろしくお願いします、ナサニエル

条件#1。次の3つのフィールドの値を比較し、3つのフィールドの最小値を出力します(null値を除く)。

「最低定価」
「最低販売価格」
「lineing_price_exception」

例:「最低定価」=3および「最低販売価格」=7および「lineing_price_exception」=nullの場合、出力は3になります。

条件#2。フィールド「overide_price」の値がnullでない場合、フィールド「overide_price」は条件#1からの出力を置き換える必要があります。「overide_price」の値がnullの場合、条件#1から値を出力します。

SELECT q.Part_ID, q.[lowest list price], q.[lowest price sold], 
       q.lining_price_exception, q.overide_price
FROM qry_to_determine_wmx_price_01 AS q;
4

2 に答える 2

2

Accessセッション内からクエリを実行する場合は、カスタムVBA関数を使用してこれを簡単に行うことができます。

MinValue()イミディエイトウィンドウで機能をテストしています...

? MinValue(4, Null, 2)
 2 
? MinValue(Null, Null, 2)
 2 
? MinValue(Null, Null, Null)
Null

したがって、このようなクエリで条件#1に取り組むことができます...

SELECT
    MinValue(
        q.[lowest list price],
        q.[lowest price sold], 
        q.lining_price_exception
    ) AS lowest_value
qry_to_determine_wmx_price_01 AS q;

あなたの条件#2Nz()については、この関数が役立つと思います。

Nz(q.overide_price, MinValue(q.[lowest list price], q.[lowest price sold],
q.lining_price_exception))

基本的に、そのNz()式は「overide_priceNullでない場合は戻り、それ以外の場合はMinValue()式から値を返す」と言います。

これは私が言及した機能です。

Public Function MinValue(ParamArray pValues() As Variant) As Variant
    Dim i As Long
    Dim iUbound As Long
    Dim varMin As Variant
    iUbound = UBound(pValues)
    varMin = Null
    For i = 0 To iUbound
        If Not IsNull(pValues(i)) Then
            If Not IsNull(varMin) Then
                If pValues(i) < varMin Then
                    varMin = pValues(i)
                End If
            Else
                varMin = pValues(i)
            End If
        End If
    Next
    MinValue = varMin
End Function
于 2012-09-13T18:52:57.927 に答える
2

これはあなたにとって十分に複雑なはずです。ここでテストされたSQLは、両方の基準を満たすVBAメソッドを定義する必要はありません。

Select q.Part_ID, 
           q.[lowest list price], 
           q.[lowest price sold], 
           q.lining_price_exception, 
           q.overide_price,
           NZ(q.overide_price,
                 IIf(q.[lowest list price]<q.[lowest price sold] OR ISNULL(q.[lowest price sold]),
                       IIf(q.[lowest list price]<q.lining_price_exception or ISNULL(q.lining_price_exception),
                             NZ(q.[lowest list price],"No valid Price listed"),
                             q.lining_price_exception
                          ),
                       IIf(q.[lowest price sold]<q.lining_price_exception or ISNULL(q.lining_price_exception),
                             NZ(q.[lowest price sold],"No valid Price listed"),
                             q.lining_price_exception
                          )
                    )
                 ) as Actual_Low_Price        
from qry_to_determine_wmx_price_01 as q;
于 2012-09-13T19:07:50.517 に答える