Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在CASE中添加默认子句_Sql Server_Tsql - Fatal编程技术网

Sql server 如何在CASE中添加默认子句

Sql server 如何在CASE中添加默认子句,sql-server,tsql,Sql Server,Tsql,如何在CASE语句中添加默认子句?我有以下疑问: DECLARE @SortColumn VARCHAR(50) SELECT * FROM @GroupList ORDER BY CASE WHEN @SortColumn = 'GroupName ASC' THEN GroupName END ASC, CASE WHEN @SortColumn = 'GroupName DESC' THEN GroupName END DESC, CASE WHEN @Sort

如何在
CASE
语句中添加默认子句?我有以下疑问:

DECLARE @SortColumn VARCHAR(50)

SELECT *
FROM @GroupList
ORDER BY 
    CASE WHEN @SortColumn = 'GroupName ASC' THEN GroupName END ASC,
    CASE WHEN @SortColumn = 'GroupName DESC' THEN GroupName END DESC,
    CASE WHEN @SortColumn = 'LCC ASC' THEN LiveConnectEmailClosure END ASC, 
    CASE WHEN @SortColumn = 'LCC DESC' THEN LiveConnectEmailClosure END DESC, 
    CASE WHEN @SortColumn = 'ES ASC' THEN EnableSharing END ASC,
    CASE WHEN @SortColumn = 'ES DESC' THEN EnableSharing END DESC,
    CASE WHEN @SortColumn = 'Description ASC' THEN GroupDescription END ASC, 
    CASE WHEN @SortColumn = 'Description DESC' THEN GroupDescription END DESC

    ELSE GroupName END ASC; -- this one doesn't work
备选方案:

DECLARE @SortDirection char(4) = 'ASC';

IF @SortColumn LIKE '%DESC' THEN
  BEGIN
    SET @SortDirection = 'DESC';
  END;

SET @SortColumn = Replace(Replace(@SortColumn, ' DESC', ''), ' ASC', '');

SELECT list
     , of
     , columns
FROM   (
        SELECT list
             , of
             , columns
             , CASE @SortColumn
                  WHEN 'GroupName'   THEN GroupName
                  WHEN 'LCC'         THEN LiveConnectEmailClosure
                  WHEN 'ES'          THEN EnableSharing
                  WHEN 'Description' THEN GroupDescription
                  ELSE GroupName
                END As sort_column
        FROM   @GroupList
       ) As x
ORDER
    BY CASE WHEN @SortDirection =  'ASC' THEN sort_column END  ASC
     , CASE WHEN @SortDirection = 'DESC' THEN sort_column END DESC;
备选方案:

DECLARE @SortDirection char(4) = 'ASC';

IF @SortColumn LIKE '%DESC' THEN
  BEGIN
    SET @SortDirection = 'DESC';
  END;

SET @SortColumn = Replace(Replace(@SortColumn, ' DESC', ''), ' ASC', '');

SELECT list
     , of
     , columns
FROM   (
        SELECT list
             , of
             , columns
             , CASE @SortColumn
                  WHEN 'GroupName'   THEN GroupName
                  WHEN 'LCC'         THEN LiveConnectEmailClosure
                  WHEN 'ES'          THEN EnableSharing
                  WHEN 'Description' THEN GroupDescription
                  ELSE GroupName
                END As sort_column
        FROM   @GroupList
       ) As x
ORDER
    BY CASE WHEN @SortDirection =  'ASC' THEN sort_column END  ASC
     , CASE WHEN @SortDirection = 'DESC' THEN sort_column END DESC;

好的,这是我给你的最好的,你仍然需要改变一两件事

假设:

create table GroupList (GroupName varchar(50),
                  LiveConnectEmailClosure varchar(50),
                  EnableSharing varchar(50),
                  GroupDescription varchar(50));

insert into GroupList values('GroupName1','YES','True','SomeDescrition');
insert into GroupList values('GroupName1','YES','True','SomeDescrition');
insert into GroupList values('GroupName1','NO','False','SomeDescrition');
insert into GroupList values('GroupName2','YES','True','SomeDescrition');
insert into GroupList values('GroupName2','YES','False','SomeDescrition');
insert into GroupList values('GroupName3','NO','True','SomeDescrition');
insert into GroupList values('GroupName3','NO','False','SomeDescrition');
insert into GroupList values('GroupName4','NO','True','SomeDescrition');
insert into GroupList values('GroupName4','NO','True','SomeDescrition');
insert into GroupList values('GroupName4','YES','False','SomeDescrition');
然后

这是我在没有T-sql编辑器的情况下所能做的最好的了,希望这能有所帮助

除此之外:请看


好的,这是我给你的最好的,你仍然需要改变一两件事

假设:

create table GroupList (GroupName varchar(50),
                  LiveConnectEmailClosure varchar(50),
                  EnableSharing varchar(50),
                  GroupDescription varchar(50));

insert into GroupList values('GroupName1','YES','True','SomeDescrition');
insert into GroupList values('GroupName1','YES','True','SomeDescrition');
insert into GroupList values('GroupName1','NO','False','SomeDescrition');
insert into GroupList values('GroupName2','YES','True','SomeDescrition');
insert into GroupList values('GroupName2','YES','False','SomeDescrition');
insert into GroupList values('GroupName3','NO','True','SomeDescrition');
insert into GroupList values('GroupName3','NO','False','SomeDescrition');
insert into GroupList values('GroupName4','NO','True','SomeDescrition');
insert into GroupList values('GroupName4','NO','True','SomeDescrition');
insert into GroupList values('GroupName4','YES','False','SomeDescrition');
然后

这是我在没有T-sql编辑器的情况下所能做的最好的了,希望这能有所帮助

除此之外:请看


我喜欢第二个版本,它更接近我想要实现的目标。然而,它不起作用。请你把整个select语句都写下来好吗?我觉得我错过了什么。如果没有提供任何内容或提供的内容与列表中的内容不同,则标准应为“GroupName ASC”
ASC
需要在
CASE
语句的末尾。它不能混合搭配。我试过几种组合。你能写一个完整的select语句吗?我喜欢第二个版本,它更接近我想要实现的目标。然而,它不起作用。请你把整个select语句都写下来好吗?我觉得我错过了什么。如果没有提供任何内容或提供的内容与列表中的内容不同,则标准应为“GroupName ASC”
ASC
需要在
CASE
语句的末尾。它不能混合搭配。我试过几种组合。你能写一个完整的select语句吗?
SELECT
   CASE 
   WHEN xyz.something = 1 THEN 'SOMETEXT'
   WHEN xyz.somethingelse = 1 THEN 'SOMEOTHERTEXT'
   WHEN xyz.somethingelseagain = 2 THEN 'SOMEOTHERTEXTGOESHERE'
   ELSE 'SOMETHING UNKNOWN'
   END AS ColumnName;