即使在搜索之后,我也在努力使用正确类型的条件选择语句。
我有一个用户表。有些是业主,有些只是客人,如下:
TABLE A
UserID | UserType | Directory | RegisteredToID | Name
1 | Guest | | 3 | Bob
2 | Guest | | 3 | Susan
3 | Owner | abc | (null) | Charles
4 | Guest | | 20 | Hugh
etc...
我正在尝试获取一个查询语句,该语句会导致Bob,Susan和Charles记录显示每个记录的目录名称,如下所示:
Name | Directory
Bob | abc
Susan | abc
Charles | abc
换句话说,Bob和Susan是Charles的客人,但Charles的记录包含我想要的目录名。希望我的问题有道理吗?
编辑:我应该提到这个转折....我不知道目录名称,只是一个用户ID(例如Bob的1)并且我正在尝试检索正确的目录名称为每个用户关联,无论他们是否是客人。只有所有者记录填写了目录名称。
答案 0 :(得分:4)
您需要自己加入表格并决定使用CASE
选择哪个目录。
从头开始(目前无法访问SQL Server):
SELECT
t1.Name,
CASE WHEN t1.RegisteredToID is null
THEN t1.Directory
ELSE t2.Directory
END AS Directory
FROM
TableA AS t1
LEFT JOIN TableA AS t2
ON t1.RegisteredToID = t2.UserID
答案 1 :(得分:1)
以下数据的CTE工作解决方案:
With TABLEA as(
SELECT 1 as UserID, 'Guest' as UserType, NULL as Directory,
3 as RegisteredToID, 'Bob' as Name
UNION ALL
SELECT 2, 'Guest', NULL, 3, 'Susan'
UNION ALL
SELECT 3, 'Owner', 'abc', NULL, 'Charles'
UNION ALL
SELECT 4, 'Guest', NULL, 20, 'Hugh'
)
SELECT B.name, A.Directory
FROM TableA A
INNER JOIN TableA B
ON A.UserID = B.RegisteredToID
OR A.UserID = b.UserID
WHERE A.Directory = 'abc'
答案 2 :(得分:1)
我修改了JNK的答案,以便它可以与任何目录名称组合一起使用,而不仅仅是'abc'
SELECT B.name, A.Directory
FROM TableA A
INNER JOIN TableA B
ON A.UserID = B.RegisteredToID
OR A.UserID = b.UserID
WHERE A.Directory <> ''
答案 3 :(得分:0)
只是采用不同的方式......正如评论中指出的那样,如果用户可以成为所有者和客户,这不起作用我只需要更好地理解数据来调整它。 / p>
Select B.Name, A.Directory
from Nova A
INNER JOIN Nova B
on A.UserID = B.RegisteredtoID or
(B.RegisteredtoID is null AND A.userID=B.userID)
where a.directory is not null
这基本上是说所有与所有者有关联的人,包括所有者,忽略了从属关系没有定义目录的情况。但是,如果所有者在表格中列出不止一次......我可能会遇到此查询的问题。