我遇到了一个小问题,我必须通过查询显示库存中的项目显示。我正在从4个表中检索数据,并希望显示类似于下面的输出。表格结构和样本值已在 SQL小提琴中给出。这是 SQL Fiddle for the table structures an values.
我想要的输出是这样的。
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
.
.
.
我花了一个多月的时间做这件事。任何人都可以帮帮我吗?
答案 0 :(得分:1)
可能是这样的: http://sqlfiddle.com/#!3/f977e/50
从限制数据的日期中删除了MIN()
。添加了dateadd-datediff
以确保删除日期的所有时间。
我看到你对where
条款进行了评论。但是你当然可以再添加它。
希望这有帮助。
编辑:
添加了总计。
答案 1 :(得分: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 Fiddle 强>
注意:这不会产生确切的输出作为数据延迟。
修改强>
假设(我认为你的结构)
1. 内向大师和外向大师中的日期 相同和副-versa 和日期是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.The Balance:
;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);