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 在中为SQL查询创建if语句_Sql Server_If Statement_Case - Fatal编程技术网

Sql server 在中为SQL查询创建if语句

Sql server 在中为SQL查询创建if语句,sql-server,if-statement,case,Sql Server,If Statement,Case,我想有一个视图,看起来像下面相同的示例,其中数据来自3个不同的表 我想创建一个查询,该查询将选择每个公司及其位置、房间和地址,但如果该公司在CA中有位置,我不想选择纽约或纽约的任何其他位置。我看到了CASE,但我不确定在这个例子中如何使用它,因为我不想输入名称。现在我的问题是这样的 SELECT DISTINCT TOP (100) PERCENT DBO.HOTEL.COMPANY, DBO.HOTEL.LOCATION AS LOCATION, DBO.AMOUNT.ROOMS,

我想有一个视图,看起来像下面相同的示例,其中数据来自3个不同的表

我想创建一个查询,该查询将选择每个公司及其位置、房间和地址,但如果该公司在CA中有位置,我不想选择纽约或纽约的任何其他位置。我看到了CASE,但我不确定在这个例子中如何使用它,因为我不想输入名称。现在我的问题是这样的

 SELECT DISTINCT TOP (100) PERCENT
     DBO.HOTEL.COMPANY, DBO.HOTEL.LOCATION AS LOCATION, DBO.AMOUNT.ROOMS, 
     DBO.PERSON.OWNERS, DBO.PERSON.ADDRESS
 FROM DBO.HOTEL INNER JOIN DBO.HOTEL.ID = DBO.AMOUNT.HOTEL_ID INNER JOIN
      DBO.HOTEL.ID = DBO.PERSON.HOTEL_ID
 WHERE (LOCATION = 'OR' OR LOCATION = 'CA' OR LOCATION = 'NY') AND
       DBO.HOTEL.OPEN_DATE >= 01/01/2015

您可以在此上下文中使用“不存在”:

SELECT DISTINCT TOP (100) PERCENT
  DBO.HOTEL.COMPANY,
  DBO.HOTEL.LOCATION AS LOCATION,
  DBO.AMOUNT.ROOMS, 
  DBO.PERSON.OWNERS,
  DBO.PERSON.ADDRESS
FROM
  DBO.HOTEL INNER JOIN DBO.HOTEL.ID = DBO.AMOUNT.HOTEL_ID
  INNER JOIN DBO.HOTEL.ID = DBO.PERSON.HOTEL_ID
WHERE
  LOCATION = 'CA' OR (
    (LOCATION = 'OR' OR LOCATION = 'NY')
    AND 
    NOT EXISTS (
        SELECT * FROM DBO.HOTEL h
        WHERE h.id=DBO.HOTEL.ID AND LOCATION='CA'
      )
    )
  AND DBO.HOTEL.OPEN_DATE >= '01/01/2015'

从你的问题中,我了解到你希望选择每个公司及其位置、房间和地址。如果一家公司在加州,你只想让它上市

您可以在此处尝试以下示例:


我收到以下错误:列名“id”无效。对于其中h.id=DBO.HOTEL.id和LOCATION='CA'line@Tavo数据库是否区分大小写?你能试一下h.ID吗?如果其中一个答案对你有帮助,请你将其标记为已接受,以结束你的问题?
create table hotel (
    company char(2),
    location char(2),
    rooms int,
    owners char(3),
    address varchar(20)
);

insert into hotel values 
('C1', 'NY', 32, 'BAP', '123 Appl'),
('C1', 'CA', 21, 'BAP', '123 Appl'),
('C1', 'OR', 24, 'BAP', '123 Appl'),
('C2', 'OR', 54, 'RED', '123 Appl'),
('C3', 'CA', 35, 'EDR', '123 Appl'),
('C4', 'NY', 14, 'LPD', '123 Appl'),
('C5', 'NY', 48, 'LPD', '123 Appl'),
('C6', 'CA', 98, 'WES', '123 Appl'),
('C6', 'OR', 56, 'WES', '123 Appl'),
('C7', 'OR', 61, 'YTR', '123 Appl'),
('C8', 'OR', 12, 'YTR', '123 Appl'),
('C9', 'CA', 25, 'MAD', '123 Appl'),
('C9', 'NY', 65, 'MAD', '123 Appl'),
('C9', 'OR', 38, 'MAD', '123 Appl');

select * from hotel
where location = 'CA'
    union all
select * from hotel
where company not in (select company from hotel where location = 'CA');

Result
company location    rooms   owners  address
C1      CA          21      BAP     123 Appl
C2      OR          54      RED     123 Appl
C3      CA          35      EDR     123 Appl
C4      NY          14      LPD     123 Appl
C5      NY          48      LPD     123 Appl
C6      CA          98      WES     123 Appl
C7      OR          61      YTR     123 Appl
C8      OR          12      YTR     123 Appl
C9      CA          25      MAD     123 Appl