TSQL查询 - 从其他行返回值

时间:2016-07-26 04:31:50

标签: sql-server tsql

我目前有一个返回此

的查询
USER    GROUP   GROUPCODE
U1      G1      abcd
U1      G2 P    vxyz
U2      G1      abcd
U2      G2      lmno

查询看起来像这样

select u.user, g.group, g.groupcode
FROM u
INNER JOIN g ON u.user = g.user

如果用户在“P”组中,我想获得匹配的“非P”组的组和组代码。 所以上面就是这样。

USER    GROUP   GROUPCODE
U1      G1      abcd
U1      G2      lmno
U2      G1      abcd
U2      G2      lmno

我使用的是非常有限的专有系统,它不支持变量或需要全文索引列的任何内容。有办法做到这一点还是我在做梦?

编辑:我正在尝试将GROUP和GROUPCODE替换为包含'P'组的行。 该查询有点像注册文件。 'P'组就像普通组的特殊版本。但是对于注册,P组中的用户应该被放入正常版本。

可以使用此

来完成GROUP
SELECT CASE WHEN (RIGHT(SU.FULLNAME, 2) = ' P') 
THEN (substring(g.group, 1, (len(g.group) - 2))) 
ELSE g.group
END AS GROUP

但后来我无法弄清楚如何获得匹配的GROUPCODE

2 个答案:

答案 0 :(得分:1)

假设GROUP总是像'AllText' P

SELECT
  u.user, 
  CASE WHEN g.group LIKE '%P' THEN LEFT(g.group, 2) 
       ELSE g.group AS group, 
  CASE WHEN g.group LIKE '%P' THEN  (
                                         SELECT TOP 1 gro.groupcode 
                                         FROM g AS gro 
                                         WHERE gro.group = LEFT(g.group , 2)
                                     ) 
       ELSE g.groupcode END AS groupcode, 
FROM 
    u INNER JOIN 
    g ON u.user = g.user

答案 1 :(得分:0)

select u.user, g.group, g.groupcode
FROM u
INNER JOIN g ON u.user = g.user
where r.group no like '%P%'