SQL查询,根据2列删除一行数据

时间:2016-10-16 17:34:01

标签: sql-server

我有一个公用表表达式查询,它返回这组数据:

Board_Name  Method          Source          TicketCount Percentage
IT Services NULL            NULL            73          0.7
IT Services Call            Call            6929        69.7
IT Services Call            CallByReception 4303        43.3
IT Services Call            CallBySupport   2626        37.9
IT Services Chat            Chat            8           0.1
IT Services EmailConnector  EmailConnector  2047        20.6
IT Services Internal        Internal        51          0.5
IT Services Portal          Portal          829         8.3

SELECT语句中,我想返回上面结果 EXCEPT 中的所有行,其中Method值等于'Call'且Source值相等“打电话”。

所以查询的结果将是:

Board_Name      Method          Source          TicketCount Percentage
IT Services     NULL            NULL            73          0.7
IT Services     Call            CallByReception 4303        43.3
IT Services     Call            CallBySupport   2626        37.9
IT Services     Chat            Chat            8           0.1
IT Services     EmailConnector  EmailConnector  2047        20.6
IT Services     Internal        Internal        51          0.5
IT Services     Portal          Portal          829         8.3

;WITH CTE AS (--select statement returns the above result --details are not important ) SELECT * FROM CTE WHERE --I need to include all of the rows except the row that has the Method and Source columns are equal to 'Call'

如何构造where子句以不包含一行?

2 个答案:

答案 0 :(得分:1)

一种方式是(Demo

 WHERE NOT 'Call' = ALL(SELECT ISNULL(Method,'') UNION SELECT ISNULL(Source,''))

或沿着类似的行(Demo)......

WHERE  'Call' <> ANY(SELECT ISNULL(MS,'') FROM (VALUES (Method),(Source)) V(MS))

或 - Demo

WHERE NOT EXISTS (SELECT 'Call' INTERSECT SELECT Method INTERSECT SELECT Source)

答案 1 :(得分:0)

使用<ul class="topnav" id="myTopnav"> <li><a class="active" href="#home">Home</a></li> <li><a href="#news">News</a></li> <li><a href="#contact" onclick="openSubMenu()">Contact</a> <ul class="subnav" id="submenuNav" hidden > <li><a href="#contact" class="submenu">Sub Menu1</a></li> <li><a href="#contact" class="submenu">Sub Menu2</a></li> <li><a href="#contact" class="submenu">Sub Menu3</a></li> </ul> </li> <li><a href="#about">About</a></li> <li class="icon"> <a href="javascript:void(0);" style="font-size:15px;" onclick="myFunction()">☰</a> </li> </ul> <div style="padding-left:16px"> <h2>Responsive Topnav Example</h2> <p>Resize the browser window to see how it works.</p> </div>逻辑来实现此目的

AND/OR

<强>样本

架构&amp;样本数据

SELECT *
FROM   CTE
WHERE  ( Method <> 'Call' AND Source <> 'Call' )
   OR  ( ( Method = 'Call' OR Method IS NULL ) AND ( Source <> 'Call' OR Source IS NULL ) )
   OR  ( ( Source = 'Call' OR Source IS NULL ) AND ( Method <> 'Call' OR Method IS NULL ) )

结果:

CREATE TABLE cte
    ([Board_Name] varchar(25), [Method] varchar(15), [Source] varchar(15), [TicketCount] int, [Percentage] numeric(22,6))
;

INSERT INTO cte
    ([Board_Name], [Method], [Source], [TicketCount], [Percentage])
VALUES
    ('IT Services',NULL, NULL, 73, 0.7),
    ('IT Services','Call', 'Call', 6929, 69.7),
    ('IT Services','Call', 'CallByReception', 4303, 43.3),
    ('IT Services','Call', 'CallBySupport', 2626, 37.9),
    ('IT Services','Chat', 'Chat', 8, 0.1),
    ('IT Services','EmailConnector', 'EmailConnector', 2047, 20.6),
    ('IT Services','Internal', 'Internal', 51, 0.5),
    ('IT Services','Portal', 'Portal', 829, 8.3)