我想问一下你的帮助,关于SQL Server,我的头脑中有一个gordian结。我试图用一个联合视图替换一个UDF,但我努力让视图返回我需要的东西。有点聪明的排序或许可以做到这一点,我卡住了。SQL Server:用联合视图替换UDF
可惜我不能在此刻注册到SQL小提琴,所以我要在这里提出的测试数据:
CREATE TABLE #Contacts
(
ID INT NOT NULL IDENTITY,
Firstname VARCHAR(50) NULL,
Lastname VARCHAR(50) NULL
)
GO
CREATE TABLE #Cars (ID INT NOT NULL IDENTITY, CarModel VARCHAR(50) NULL)
GO
CREATE TABLE #Ownership
(
Contacts_ID INT NOT NULL,
cars_id INT NOT NULL,
ownership_type TINYINT NOT NULL,
DisplayName VARCHAR(50) NULL
)
GO
CREATE TABLE #Races(ID INT NOT NULL IDENTITY, RaceName VARCHAR(50) NOT NULL)
GO
CREATE TABLE #RaceEntries
(
ID INT NOT NULL IDENTITY,
Races_ID INT NOT NULL,
Contacts_ID INT NOT NULL,
cars_id INT NOT NULL
)
INSERT [#Contacts] ([Firstname], [Lastname])
SELECT
'Justin', 'Case' UNION ALL SELECT
'Gladys', 'Friday' UNION ALL SELECT
'Mandy', 'Lifeboats'
GO
INSERT [#Cars] ([CarModel])
VALUES ('Great Car')
GO
INSERT [#Races] ([RaceName])
VALUES ('A Car Race')
INSERT [#Ownership] ([Contacts_ID], [cars_id], [ownership_type], [DisplayName]) SELECT
1, 1, 0, NULL UNION ALL SELECT
2, 1, 1, NULL UNION ALL SELECT
3, 1, 1, 'Mandy Lifeboats Racing Team'
INSERT [#RaceEntries] ([Races_ID], [Contacts_ID], [cars_id]) SELECT
1, 1, 1 UNION ALL SELECT
1, 3, 1 UNION ALL SELECT
1, 2, 1
我想什么:
SELECT
[cars_id], mvo.Ownername
FROM
[#RaceEntries] -- join a view that returns the ownername
LEFT OUTER JOIN
#myViewOwnername AS mvo ON mvo.Contacts_ID = [#RaceEntries].[Contacts_ID] AND mvo.Cars_ID = [#RaceEntries].[cars_id]
这里的问题每辆车只有一个车主(所有权类型为0)。它可以有其他联系人作为代表。
通常在#RaceEntries
的列表中,显示所有者的名称,除非代表具有约定的“超驰”(以便显示他的或公司名称)。
在上面的例子中,对于Justin Case的入门而言,它是直截了当的。他是所有者(类型0),故事结束。
当Gladys Friday进入时(她没有覆盖“DisplayName”),系统应该再次将Justin Case的姓名作为所有者返回。
在上例中,Mandy Lifeboats具有DisplayName,因此应该返回。
理想情况下,我最终将得到一个视图或类似的重要提升,以便我可以将它加入到#RaceEntries(加入汽车和联系人ID)的x000记录中以获取正确的所有者名称。
我希望我尽可能简化了这个例子,真实情况有点复杂......请让我知道我是否应该准备其他任何东西来帮助简单一点。非常感谢!
@marc_s感谢您的编辑! – ExternalUse