我有一个这样的桌子
DBName p_server_fqdn p_server_alias q_server_fqdn q_server_alias
cube1 server1.com p1server.com server5.com q1server.com
cube1 server2.com p1server.com server6.com q1server.com
cube2 server3.com p2server.com server7.com q2server.com
cube2 server4.com p2server.com server8.com q2server.com
我想运行一个案例选择查询,在该查询中,我获得了与服务器列匹配相应DBName的服务器输入的别名
这是我到目前为止正在尝试的
$SAlias = Invoke-sqlcmd -Query "SELECT DISTINCT CASE
WHEN ($cubeTable.DBName like $CUBE_input) AND ($cubeTable.p_server_fqdn) like $server_input THEN p_server_alias
WHEN ($cubeTable.DBName like $CUBE_input) AND ($cubeTable.q_server_fqdn) like $server_input THEN q_server_alias
ELSE 'unknown'
END as SAlias
FROM table $cubeTable" -ConnectionString "connectionstuff" | Select -ExpandProperty SAlias
但是当我在SSMS中尝试查询自身时(具有硬编码的值,例如cube1和server2.com),我返回了2行,其中与DBName不匹配的行为“未知”,而1行则显示p_server_alias
即时通讯结果
在这种情况下,我应该只回到第一行:p1server.com,所以为什么我也变得陌生?
答案 0 :(得分:2)
set @cubeInput = 'cube1';
set @serverInput = 'server6.com';
select
case when count(*) = 0 then 'UNKNOWN'
when m.p_server_fqdn = @serverInput then m.p_server_alias
when m.q_server_fqdn = @serverInput then m.q_server_alias
end as alias
from mytable m
where DBName = @cubeInput and (
p_server_fqdn = @serverInput
or q_server_fqdn = @serverInput
);
这是我的答案的实现:http://sqlfiddle.com/#!9/b967a22/61
@Cataster解决方案返回2行,因为实际上他获得了4行(3行为“ unkown”和1行为“ p1server.com”),然后在查询中进行了区分。使结果变成2行。
我的解决方案有点棘手:)。在查询中使用过滤器。比如果没有得到任何结果,则使用count函数。因此,我们得到1行,其值为0,而不是将其显示为“未知”。