Я новичок в представлениях SQL, поэтому будьте осторожны!
У меня есть следующее представление SQL:
SELECT dbo.product.name AS [Product Name],
ROUND(CASE [vat] WHEN 1 THEN [packcost] * 1.2 ELSE [packcost] END, 2) AS [Pack Cost],
ROUND(CASE [vat] WHEN 1 THEN ([packcost] * 1.2) / [units] ELSE [packcost] / [units] END, 2) AS [Unit Cost],
dbo.purchase.unitsaleprice * dbo.product.units AS [ Pack Sale Price], dbo.purchase.unitsaleprice AS [Unit Sale Price],
dbo.product.units * (dbo.purchase.unitsaleprice - ROUND(CASE [vat] WHEN 1 THEN ([packcost] * 1.2) / [units] ELSE [packcost] / [units] END, 2)) AS [Pack Profit],
dbo.purchase.unitsaleprice - ROUND(CASE [vat] WHEN 1 THEN ([packcost] * 1.2) / [units] ELSE [packcost] / [units] END, 2) AS [Unit Profit]
FROM dbo.product INNER JOIN
dbo.purchase ON dbo.product.id = dbo.purchase.productID
Но это кажется неэффективным, так как я много переписываю.
Например, я хотел бы определить столбец [Стоимость упаковки]:
ROUND(CASE [vat] WHEN 1 THEN [packcost] * 1.2 ELSE [packcost] END, 2) AS [Pack Cost]
будет использоваться вместо того, чтобы переписывать его.
например, чтобы я мог использовать:
[Pack Cost] / [Units]
Для определения стоимости единицы вместо:
ROUND(CASE [vat] WHEN 1 THEN ([packcost] * 1.2) / [units] ELSE [packcost] / [units] END, 2) AS [Unit Cost]
Не уверен, что я получаю правильный конец палки, или это уместно.