使用SQL CASE语句如何查找多个项目

时间:2017-10-27 05:58:44

标签: sql sql-server tsql

如果波纹管条件为真,我需要从“Mortgage_Type”列中获取“THEN”的值。 Mortgage_Type和Category与另一个表中的表和设备相同。表正在使用Item_No加入。我需要找到每个项目的Mortgage_Type。如果Category为main且Equipment为null,则我有20+ Mortgage_Types,然后应显示相关的Mortgage_Type

when SUM (Mortgage_Type)is not null and SUM (Equipment)is null and sum(Category) =’M’ THEN “value from Mortgage_Type column”

2 个答案:

答案 0 :(得分:1)

也许,这应该有所帮助:

SELECT DISTINCT
       Contract,
       CASE
          WHEN CATOGORY NOT IN ('M', 'O') AND TYPE NOT IN ('V', 'E')
          THEN
             CASE
                WHEN M_TYPE = 'V' THEN 'VEHICLE'
                WHEN M_TYPE = 'O' THEN 'OTHERS'
                WHEN M_TYPE = 'M' THEN 'MORTGAGE'
                WHEN M_TYPE = 'H' THEN 'HOUSE'
                WHEN M_TYPE LIKE '%,%' THEN 'MULTIPLE'
             END
       END
          AS TYPE
  FROM Table1 LEFT JOIN Table2 ON Contract = ID

答案 1 :(得分:0)

您可以使用cte和window函数。像这样:

DECLARE @t TABLE(
  [Contract] int
  ,[M_TYPE] nvarchar(100)
)

INSERT INTO @t VALUES
(1, 'V')
,(1, 'O')
,(1, 'M')
,(2, 'V')
,(3, 'V')
,(4, 'H')
,(4, 'V');

WITH cte AS(
  SELECT t.Contract,
         t.M_TYPE,
         COUNT(M_TYPE) OVER (PARTITION BY t.Contract) Multi
    FROM @t t
)
SELECT DISTINCT [Contract], CASE
                              WHEN Multi > 1 THEN 'Multiple'
                              WHEN M_TYPE = 'V' THEN 'VEHICLE'
                              WHEN M_TYPE = 'O' THEN 'OTHERS'
                              WHEN M_TYPE = 'M' THEN 'MORTGAGE'
                              WHEN M_TYPE = 'H' THEN 'HOUSE'
                              ELSE 'UNKNOWN'
                            END AS MortgageType
  FROM cte