0

クエリを使用してインベントリ内のアイテムの表示を表示する必要があるという小さな問題に遭遇しました。4 つのテーブルからデータを取得しており、以下のような出力を表示したいと考えています。テーブル構造とサンプル値はSQL fiddleで提供されています。これは、テーブル構造と値の SQL Fiddle です。

私が望む出力はこのようなものです。

Date                    ItemName        Rate     InQty  OutQty  Balance ItemUnit
2013-01-04 00:00:00.000 Sand            0.000    10    5        5       NONE
2013-01-04 00:00:00.000 Backhoe Loader  650.000  20    2        18      Hr
2013-01-04 00:00:00.000 Tractor Troley  150.000  10    0        10      Hr

2013-02-04 00:00:00.000 Sand            0.000    0     5        0       NONE
2013-02-04 00:00:00.000 Backhoe Loader  650.000  5     2        21      Hr
2013-02-04 00:00:00.000 Tractor Troley  150.000  10    30       -10     Hr
.
.
.

私はこれを行うのに1か月以上費やしました。誰でも私を助けてくれますか?

4

2 に答える 2

1

多分このようなもの: http://sqlfiddle.com/#!3/f977e/50

MIN()データを制限したため、日付から を削除しました。dateadd-datediff日付のすべての時間が削除されるようにするために追加されました。whereご覧のとおり、条項にコメントしました。もちろん、もう一度追加することもできます。

お役に立てれば。

編集 :

総計を追加しました。

http://sqlfiddle.com/#!3/f977e/75

于 2013-04-12T15:16:03.843 に答える
0

これを試してくださいQuery

SELECT 
DISTINCT
CONVERT(DATETIME,CONVERT(DATE,I.[Date]),101) AS [Date],
I.Nameofitem AS ItemName,
I.Rate AS RATE,
I.Qty AS InQty,
ISNULL(O.Qty,0) AS OutQty,
ISNULL(I.Qty,0)-ISNULL(O.Qty,0) AS Balance,
O.unit AS ItemUnit
FROM Outwards_Master O
RIGHT JOIN Inwards_Master I ON O.Nameofitem=I.Nameofitem
                                AND CONVERT(DATE,O.[Date])=CONVERT(DATE,I.[Date])

SQL フィドル

注:データが遅延するため、これは正確な出力を生成しません。

編集:

仮定(あなたの構造にあると思います)

1.内向きマスターと外向きマスターのすべての日付同じありまた同様であり、かつ日付がISであるPRIMARY KEY

2.すべてのアイテムには、日付ごとに内向き外向きの数量列があります

上記の仮定で、ここにSQL Query

1.TEMPテーブル

SELECT 
DENSE_RANK() over(order by I.Date) AS [RANK],
ROW_NUMBER()over(partition by I.Date order by I.Date) AS [VersionId],
I.Date,
I.Nameofitem,
I.Rate,
ISNULL(I.Qty,0) AS INQTY,
ISNULL(O.Qty,0) AS OUTQTY,
I.unit
INTO #TEMP1
FROM 
#Inwards_Master I
INNER JOIN #Outwards_Master O ON CONVERT(DATE,O.[Date])=CONVERT(DATE,I.[Date])
            AND I.Nameofitem=O.Nameofitem

SELECT * FROM #TEMP1 ORDER BY Date,Nameofitem

2.バランス:

;WITH x AS
(
    SELECT 
        [Rank],
        [VersionId],
        Nameofitem,
        [Date],
        INQTY,
        OUTQTY,
        bal=(INQTY-OUTQTY)
    FROM #temp1
    WHERE [Rank] = 1
    UNION ALL
    SELECT 
        y.[Rank],
        y.[VersionId],
        y.Nameofitem,
        y.[Date],
        y.INQTY,
        y.OUTQTY,
        x.bal+(y.INQTY-y.OUTQTY)
    FROM x INNER JOIN #temp1 AS y
    ON y.[Rank] = x.[Rank] + 1
    AND y.VersionId=x.VersionId
    and y.Nameofitem=x.Nameofitem
)
SELECT 
    [Date],
    Nameofitem,
    INQTY,
    OUTQTY,
    Balance = bal
FROM x
ORDER BY Date,Nameofitem
OPTION (MAXRECURSION 10000);

確認する SQL Fiddle は次のとおりです。

于 2013-04-11T06:21:59.393 に答える