我有一个计算列的视图,现在我需要强制计算列为"not null“来表示光开关。
我尝试过cast(),但我仍然不能使计算列成为"not null“,可以吗?
这是我的SQL:
SELECT dbo.Nop_Manufacturer.Name,
CAST(SUM(dbo.Nop_OrderProductVariant.PriceExclTax) AS INT) AS
SALES,
CAST(MONTH(dbo.Nop_Order.PaidDate) AS INT) AS
paid_month,
CAST(YEAR(dbo.Nop_Order.PaidDate) AS INT) AS
paid_year,
CAST(COUNT(dbo.Nop_OrderProductVariant.OrderProductVariantID) AS INT)AS
num_prod_sold
FROM dbo.Nop_ProductVariant
INNER JOIN dbo.Nop_OrderProductVariant
ON dbo.Nop_ProductVariant.ProductVariantId =
dbo.Nop_OrderProductVariant.ProductVariantID
INNER JOIN dbo.Nop_Product
ON dbo.Nop_ProductVariant.ProductID = dbo.Nop_Product.ProductId
INNER JOIN dbo.Nop_Product_Manufacturer_Mapping
INNER JOIN dbo.Nop_Manufacturer
ON dbo.Nop_Product_Manufacturer_Mapping.ManufacturerID =
dbo.Nop_Manufacturer.ManufacturerID
ON dbo.Nop_Product.ProductId =
dbo.Nop_Product_Manufacturer_Mapping.ProductID
INNER JOIN dbo.Nop_Order
ON dbo.Nop_OrderProductVariant.OrderID = dbo.Nop_Order.OrderID
WHERE ( NOT ( dbo.Nop_Order.PaidDate IS NULL ) )
GROUP BY dbo.Nop_Manufacturer.Name,
MONTH(dbo.Nop_Order.PaidDate),
YEAR(dbo.Nop_Order.PaidDate) 发布于 2011-09-25 18:19:43
CAST-ing as INT不会做任何事情来影响所感知的计算列的空性。您需要将它们包装在ISNULL中而不是。
例如ISNULL(YEAR(dbo.Nop_Order.PaidDate),0)
这在最后一段中有记录。
数据库引擎根据使用的表达式自动确定计算列的空值。大多数表达式的结果被认为是可空的,即使只有非空列存在,因为可能的潜流或溢出也会产生空结果。使用带有
COLUMNPROPERTY属性的AllowsNull函数来研究表中任何计算列的空性。可以通过指定ISNULL(check_expression, constant)将可空表达式转换为非空表达式,其中常量是替换任何空结果的非空值。
https://stackoverflow.com/questions/7547217
复制相似问题