[英]Sql query getting name column null
CREATE TABLE [Users_Reg]
(
[User_ID] [int] IDENTITY (1, 1) NOT NULL CONSTRAINT User_Reg_P_KEY PRIMARY KEY,
[Name] [varchar] (50) NOT NULL,
[Type] [varchar] (50) NOT NULL /*Technician/Radiologist*/
)
CREATE Table [Study]
(
[UID] [INT] IDENTITY (1,1) NOT NULL CONSTRAINT Patient_Study_P_KEY PRIMARY KEY,
[Radiologist] [int], /*user id of Radiologist type*/
[Technician] [int], /*user id of Technician type*/
)
select * from Study
inner join Users_Reg
on Users_Reg.User_ID=Study.Radiologist
在patient_study表中,放射科醫師或技師可能有0值。 我如何從查詢中獲得技術員姓名和放射科醫生姓名。
您需要兩次在users_reg
表上加入以獲得結果。 一次是放射科醫師,另一次是技術人員:
select ps.uid,
ur1.name rad_name,
ur1.type rad_type,
ur2.name tech_name,
ur2.type tech_type
from Patient_Study ps
left join Users_Reg ur1
on ur1.User_ID=ps.Radiologist
left join Users_Reg ur2
on ur2.User_ID=ps.Technician;
請參閱SQL Fiddle with Demo 。 這將返回所有患者研究的放射科醫師和技師名稱/類型。 如果要替換任何列中的null,則可以使用類似於以下內容的COALESCE
:
select ps.uid,
coalesce(ur1.name, '') rad_name,
coalesce(ur1.type, '') rad_type,
coalesce(ur2.name, '') tech_name,
coalesce(ur2.type, '') tech_type
from Patient_Study ps
left join Users_Reg ur1
on ur1.User_ID=ps.Radiologist
left join Users_Reg ur2
on ur2.User_ID=ps.Technician;
在你的情況下你可以使用isnull
:
select *
from Patient_Study as PS
inner join Users_Reg as U on U.User_ID = isnull(nullif(PS.Radiologist, ''), PS.Technician)
或兩個left outer joins
:
select PS.*, isnull(UP.Type, UT.Type) as Type
from Patient_Study as PS
left outer join Users_Reg as UP on UP.User_ID = PS.Radiologist
left outer join Users_Reg as UT on UT.User_ID = PS.Technician;
SQL FIDDLE示例。
作為我可能會說的建議 - 如果沒有適當的值,請在表中存儲null
值
INSERT INTO Patient_Study(Radiologist,Technician)VALUES('1','2')
INSERT INTO Patient_Study(Radiologist,Technician)VALUES('1','')
INSERT INTO Patient_Study(Radiologist,Technician)VALUES(null,'2')
檢查這個小提琴
代碼:
SELECT *
FROM Patient_Study
INNER JOIN Users_Reg
ON CASE
WHEN Patient_Study.Radiologist = ''
THEN Patient_Study.Technician
ELSE Patient_Study.Radiologist
END = Users_Reg.User_ID;
如果你把它變成NULL而不是“”(我更喜歡)
SELECT *
FROM Patient_Study
INNER JOIN Users_Reg
ON COALESCE(Patient_Study.Radiologist,Patient_Study.Technician) = Users_Reg.User_ID
我選擇COALESCE而不是ISNULL,因為你可以在那里添加其他技術人員。
這個怎么樣。
select *,'Radiologist' as StudiedBy from Patient_Study
inner join Users_Reg
on Users_Reg.User_ID=Patient_Study.Radiologist
and Patient_Study.Radiologist>0
Union
select *,'Technician' from Patient_Study
inner join Users_Reg
on Users_Reg.User_ID=Patient_Study.Technician
and Patient_Study.Technician >0
我添加了一個標記StudiedBy來區分放射科醫生和Techinician。 您可以添加where條件來檢查特定的User_Reg
select R.Name as TechnicianName,T.Name as RadiologistName
from Patient_Study
inner join Users_Reg R
on Patient_Study.UID=R.User_ID
inner join Users_Reg T
on Patient_Study.UID=T.User_ID.
看到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.