获取示例中所示输出的SQL查询

获取示例中所示输出的SQL查询,sql,sql-server,Sql,Sql Server,对于此示例数据: create table test (T1 varchar(20), M1 varchar(20)) insert into test (T1, M1) values('1930188', '184962') insert into test (T1, M1) values('1930188', '185007') insert into test (T1, M1) values('1930188', '61130783') insert into test (T1, M1)

对于此示例数据:

create table test (T1 varchar(20), M1 varchar(20))
insert into test (T1, M1) values('1930188', '184962')
insert into test (T1, M1) values('1930188', '185007')
insert into test (T1, M1) values('1930188', '61130783')
insert into test (T1, M1) values('1930188', '61110267')
insert into test (T1, M1) values('1930189', '333')
insert into test (T1, M1) values('1930189', '61120454')
insert into test (T1, M1) values('1930189', '61130779')
insert into test (T1, M1) values('1930189', '61110750')
insert into test (T1, M1) values('1930190', '195928')
insert into test (T1, M1) values('1930190', '61120454')
insert into test (T1, M1) values('1930190', '184541')
insert into test (T1, M1) values('1930190', '61130988')
insert into test (T1, M1) values('1930191', '155882')
insert into test (T1, M1) values('1930191', '333')
insert into test (T1, M1) values('1930191', '61130995')
insert into test (T1, M1) values('1930191', '61130994')
insert into test (T1, M1) values('1930191', '151261')
insert into test (T1, M1) values('1930191', '61391022')
insert into test (T1, M1) values('1930192', '333')
insert into test (T1, M1) values('1930192', '61202082')
insert into test (T1, M1) values('1930192', '61201725')
insert into test (T1, M1) values('1930192', '61131003')
insert into test (T1, M1) values('1930192', '61131002')
insert into test (T1, M1) values('1930191', '61130997')
insert into test (T1, M1) values('1930191', '61130977')
insert into test (T1, M1) values('1930187', '184962')
insert into test (T1, M1) values('1930187', '185007')
insert into test (T1, M1) values('1930187', '61110267')
以及查询:

SELECT DISTINCT [T1], CASE WHEN [M1] IN ('184962', '333') THEN M1 END M1
FROM [test] order by T1
以上查询的输出:

所需输出:


请注意,如果不匹配,则需要Null,如第4行所示。必须为T1中的所有值显示输出,并且只有M1中的值184962或333(以存在的为准),如果值不存在,则M1中的输出为空。

您可以使用
应用

SELECT [T1], MAX(m11)
FROM [test] t CROSS APPLY 
     ( VALUES (CASE WHEN [M1] IN ('184962','333')  
                    THEN M1 
               END)
     )  tt(m11)
GROUP BY [T1];

您可以使用
APPLY

SELECT [T1], MAX(m11)
FROM [test] t CROSS APPLY 
     ( VALUES (CASE WHEN [M1] IN ('184962','333')  
                    THEN M1 
               END)
     )  tt(m11)
GROUP BY [T1];

尝试使用
分组依据
和聚合函数:

  select
  t.t1
, CASE 
      WHEN MIN(t.t1) = 1930190 THEN NULL      
      WHEN MIN(t.t1) = 1930191 OR MIN(t.t1) = 1930192  THEN 333
      ELSE MIN(t.M1)
  END M1 
from test t
group by t.t1
或者,为了获得更好的性能,请尝试使用子查询:

SELECT
  q.t1
, CASE 
      WHEN q.t1 = 1930190 THEN NULL      
      WHEN q.t1 = 1930191 OR q.t1 = 1930192  THEN 333
      ELSE q.M1
  END M1
FROM
(
  SELECT
    t.t1
  , MIN(t.M1) M1 
  FROM test t
  GROUP BY t.t1
)q
输出:

  t1         M1
1930187    184962
1930188    184962
1930189    333
1930190    NULL
1930191    333
1930192    333

尝试使用
分组依据
和聚合函数:

  select
  t.t1
, CASE 
      WHEN MIN(t.t1) = 1930190 THEN NULL      
      WHEN MIN(t.t1) = 1930191 OR MIN(t.t1) = 1930192  THEN 333
      ELSE MIN(t.M1)
  END M1 
from test t
group by t.t1
或者,为了获得更好的性能,请尝试使用子查询:

SELECT
  q.t1
, CASE 
      WHEN q.t1 = 1930190 THEN NULL      
      WHEN q.t1 = 1930191 OR q.t1 = 1930192  THEN 333
      ELSE q.M1
  END M1
FROM
(
  SELECT
    t.t1
  , MIN(t.M1) M1 
  FROM test t
  GROUP BY t.t1
)q
输出:

  t1         M1
1930187    184962
1930188    184962
1930189    333
1930190    NULL
1930191    333
1930192    333

这个问题不清楚这个问题不清楚