111*_*110 5 sql t-sql sql-server stored-procedures sql-server-2008
我有一张桌子tbl_Info:
InfoId
Text
PrivacyTypeId
UserName
TypeId
IsInfo
InfoItemId
Run Code Online (Sandbox Code Playgroud)
数据示例:
1|Some text...|1|userX|1|False|NULL
2|New job created|1|system|3|True|765
3|Image commented|1|system|4|True|457
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我从该表中获取所有值,并将其显示为列表.
应用程序用户可以单击每个项目,并应将它们重定向到应用程序中的某个位置.
我在数据库中有一些绑定到此表的表,但此连接非常动态.例如这个表:
tbl_Jobs{JobId, Title etc.}, tbl_Articles{ArticleId, Title etc.}
Run Code Online (Sandbox Code Playgroud)
问题出
在这里:在我添加之前IsInfo,InfoItemId我只有一种用户输入此信息的类型,我只需要获取信息列+用户全名:
select i.*, p.FirstName + ' ' + p.LastName as Author
from tbl_Info i
left join tbl_Profiles p on i.UserName = p.UserName
where i.PrivacyTypeId = 1
Run Code Online (Sandbox Code Playgroud)
现在我需要更改Author名称为的列,Title此值应为:全名或职位或文章标题等.
我不知道是否可以制作选择程序,因此它可以基于IsInfo并TypeId从ID为的另一个表中获取项目标题InfoItemId.
如下所示:如果IsInfo = True.获取typeId.并基于此typeId连接到某个表并从中获取一些列.
IF typeId = 2 ... join tbl_Jobs on ...
IF typeId = 3 ... join tbl_Articles on ...
Run Code Online (Sandbox Code Playgroud)
对不起,我很抱歉.但我找不到解决方案,我需要更详细地解释问题.
Pao*_*lla 11
你可以这样做:
SELECT
CASE typeID
WHEN 1 THEN tbl_Profiles.FirstName + ' ' + tbl_Profiles.LastName
WHEN 2 THEN ...
WHEN 3 THEN ...
END AS Title
FROM tbl_Info
LEFT OUTER JOIN tbl_Profiles ON
tbl_Info.UserName = tbl_Profiles.UserName
AND typeID = 1
LEFT OUTER JOIN tbl_Jobs ON
....
AND typeID = 2
LEFT OUTER JOIN tbl_Articles ON
....
AND typeID = 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8853 次 |
| 最近记录: |