【发布时间】:2015-03-17 04:08:48
【问题描述】:
我有以下 sql 代码。我使用带有日期间隔的 WHERE 子句。我的问题是我只想在 select 语句的特定部分使用日期间隔。
我想将 WHERE 子句 DATE 限制为我在 QtyInPeriod 和 ProfitInPeriod 上的选择,而不是选择的其他列(Lines.Item、Inventory.ItemAlternative、Inventory.OnHandPhys、Inventory.Allocated、Inventorry.CostPrice、Brand & StockStatus)。
我需要在 2 个单独的 sql 查询中获取数据还是可以将 WHERE DATE 子句限制为仅选择语句的一部分?
SELECT lines.Item,
Inventory.ItemAlternative,
Inventory.OnHandPhys,
Inventory.Allocated,
Inventory.CostPrice,
SUM(lines.Invoiced)*-1 AS QtySoldInPeriod,
(SUM(lines.AmountBase-lines.CostAmount))*-1 AS ProfitInPeriod,
replace(vInventoryOptional2Values.Value, '/', '') AS Brand,
Inventory.Optional3 AS StockStatus
FROM lines
INNER JOIN inventory ON lines.item = Inventory.item
INNER JOIN vInventoryOptional2Values ON Inventory.Optional2 = vInventoryOptional2Values.RecordID
WHERE Inventory.Item = 'ITEM#'
AND Lines.Date >= 'DATE'
AND Lines.Date <= 'DATE'
AND lines.Invoiced < 0
AND Inventory.Status = 0
AND Inventory.Optional3 <> 3
GROUP BY Lines.Item,
Inventory.Optional3,
Inventory.ItemAlternative,
Inventory.OnHandPhys,
Inventory.CostPrice,
vInventoryOptional2Values.Value,
Inventory.Allocated
HAVING SUM(lines.AmountBase-lines.CostAmount) < 0
编辑: 我尝试过使用子查询,但无法正常工作:
SELECT lines.Item,
Inventory.ItemAlternative,
Inventory.OnHandPhys,
Inventory.Allocated,
Inventory.CostPrice,
replace(vInventoryOptional2Values.Value, '/', '') AS Brand,
Inventory.Optional3 AS StockStatus
(SELECT SUM(lines.Invoiced)*-1 AS QtySoldInPeriod
FROM (lines.item
WHERE Lines.Date >= '2014-01-01'
AND Lines.Date <= '2014-01-31' ) )
FROM lines
INNER JOIN inventory ON lines.item = Inventory.item
INNER JOIN vInventoryOptional2Values ON Inventory.Optional2 = vInventoryOptional2Values.RecordID
WHERE Inventory.Item = 'a158wa'
AND lines.Invoiced < 0
AND Inventory.Status = 0
AND Inventory.Optional3 <> 3
GROUP BY Lines.Item,
Inventory.Optional3,
Inventory.ItemAlternative,
Inventory.OnHandPhys,
Inventory.CostPrice,
vInventoryOptional2Values.Value,
Inventory.Allocated
【问题讨论】:
-
sqlformat.org 是格式化 SQL 以便于阅读的好方法。这次我替你做了。
-
根据您想要的具体情况,可以有多个答案。您能否谈谈您想要的答案,而不是 SQL 细节?例如,您是否希望列出所有项目,无论它们是否在该时间段内开具发票?
-
我正在从 ERP 数据库中获取数据。 “库存”表包含特定产品的库存水平、成本价格等。我需要每个产品的这些列的最新值(今天的日期)。但是我想在特定日期间隔内从 Lines 表中获得每件商品的销售数量和每件商品的利润。问题是设置日期间隔的 WHERE 子句会影响“库存”表中的数据。如果什么都没卖出(表“行”中没有条目,那么我从“库存”表中什么也得不到。我希望这能更好地解释它。
-
我的第一个想法是在总和中使用 CASE 语句来检查日期...如果在范围内,则将值返回给总和,否则返回零。
-
我认为您想要的是仅针对具有特定日期间隔的列的子查询。这有帮助吗? stackoverflow.com/questions/16317814/… 那还是做两个查询。
标签: sql sql-server