我有一个运行SQL Server Express数据库的系统,我需要从中提取一些数据。我创建了基本的SQL查询,但是我发现有些数据位于其他地方。SQL查询从另一个表中提取数据IF NULL
基本前提是我有修理订单,车辆和客户的数据库。车辆通常通过VIN解码器添加,因此它们具有来自MAKE和MODEL表的ID关联。但是在VIN不解码的情况下,应用程序允许用户手动输入此信息,然后将其存储在另一个名为“UserVehicleAttributes”的表中。在此表中有VehicleID,AttributeName,& AttributeValue。
UserAttributeId VehicleId AttributeName AttributeValue
-----------------------------------------------------------
364 6829 Model Sedona
365 6830 Make Kia
366 6830 Model Sedona
所以我需要的是,如果品牌或型号的车辆台出现为NULL,我可以显示的内容,如手动输入。
我发现,在DB的现有功能看起来能够做我所需要的,但我不知道如何将它用作我的查询的一部分。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [SM].[fnVehicleModelName]()
RETURNS TABLE
AS
RETURN
(
\t SELECT DISTINCT v.VehicleId,
\t \t CASE
\t \t \t WHEN v.SubModelId IS NULL THEN ISNULL(ua.[AttributeValue],'')
\t \t \t ELSE smm.[Name]
\t \t END as Model
\t FROM SM.Vehicle v (NOLOCK)
\t LEFT OUTER JOIN
(SELECT sm.SubModelId, m.[Name] + ' ' + sm.[Name] as Name
FROM DMV.SubModel (NOLOCK) sm
\t \t \t \t \t INNER JOIN DMV.Model m (NOLOCK)
\t \t \t \t \t \t \t ON sm.ModelId = m.ModelId) as smm
ON v.SubModelId = smm.SubModelId
LEFT OUTER JOIN SM.UserVehicleAttributes ua (NOLOCK)--
\t \t \t ON v.VehicleId = ua.VehicleId and ua.AttributeName = 'Model'
任何帮助是极大的赞赏。我对SQL不太好(显然),但我试图找出这一点。
一对夫妇澄清的问题:(1)其他表格的结构是什么? (2)是在任何/所有表格之间共享的标识符? – Chris
对于空结果,是否返回一行作为make,null ...或者'make'是否完全不出现? – Twelfth