2013-06-22 1 views
-1
SELECT DT.TenantDescription 
    ,DT.PropertyNumber 
    ,DT.UnitNo 
    ,DT.AdressLn1 
    ,DT.AddressLn2 
    ,DT.AddressSituation 
    ,(
     CASE 
      WHEN DT.TransactionCode = 1 
       THEN DT.New_TransactionValue 
      ELSE 0 
      END 
     ) AS RentDue 
    ,(
     CASE 
      WHEN DT.TransactionCode = 2 
       THEN DT.New_TransactionValue 
      ELSE 0 
      END 
     ) AS OTHERSUMSDUE 
    ,(
     CASE 
      WHEN DT.TransactionCode = 3 
       THEN DT.New_TransactionValue 
      ELSE 0 
      END 
     ) AS ARREARSBFWD 
    ,(
     CASE 
      WHEN DT.TransactionCode = 4 
       THEN DT.New_TransactionValue 
      ELSE 0 
      END 
     ) AS ARREARSCFWD 
    ,(
     CASE 
      WHEN DT.TransactionCode = 5 
       THEN DT.New_TransactionValue 
      ELSE 0 
      END 
     ) AS IRRECOVERABLERENT 
    ,(
     CASE 
      WHEN DT.TransactionCode > 5 
       THEN DT.New_TransactionValue 
      ELSE 0 
      END 
     ) AS Expenditure 
FROM (
    SELECT * * (
      SELECT New_TenantNameOnly 
      FROM New_Rentmaster Rm 
      WHERE Rm.New_rentmasterId = PD.new_rentmasterid 
      ) AS TenantDescription 
     ,* * (
      SELECT [New_UnitNumber] 
      FROM new_propertyunits NPU 
      WHERE NPU.[New_propertyunitsId] = PD.[new_unitnumberid] 
      ) AS UnitNo 
     ,(
      SELECT New_AddressLine1 
      FROM New_address 
      WHERE New_addressId = (
        SELECT New_addressid 
        FROM New_PropertyMaster PM 
        WHERE PM.new_propertymasterid = PD.[new_propertynumbernameid] 
        ) 
      ) AS AdressLn1 
     ,(
      SELECT New_AddressLine2 
      FROM New_address 
      WHERE New_addressId = (
        SELECT New_addressid 
        FROM New_PropertyMaster PM 
        WHERE PM.new_propertymasterid = PD.[new_propertynumbernameid] 
        ) 
      ) AS AddressLn2 
     ,(
      SELECT TT.[New_TransactionTypeCode] AS TransactionCode 
      FROM New_transactiontype TT 
      WHERE [New_transactiontypeId] = PD.[new_transactioncodenameid] 
      ) AS TransactionCode 
     ,(
      SELECT New_PropertyNumber 
      FROM New_PropertyMaster PM 
      WHERE PM.new_propertymasterid = PD.[new_propertynumbernameid] 
      ) AS PropertyNumber 
     ,(
      SELECT New_UnitAddressIdName 
      FROM New_propertyunits NPU 
      WHERE NPU.[New_propertyunitsId] = PD.[new_unitnumberid] 
      ) AS AddressSituation 
     ,PD.New_TransactionValue 
    FROM New_PropertyDetails PD 
    ) AS DT 

выше кусок кода работает отличноTSQL Subquery связанные

Теперь я хочу, чтобы внести изменения в вышеприведенном колонке (имя является псевдонимом TenantDescription) , где я хочу, чтобы заменить выше колонку со следующим код

Select New_TenantNameOnly from New_Rentmaster Rm  
    New_TenantNumber IN 
    (Select MAX(New_TenantNumber) from new_rentmaster GROUP BY [New_Unit_No],[New_Propety_Number]) 

то это дает мне ошибку

подзапрос возвращает больше т хань одно значение

Этот код должен возвращать более одного значения

Так что я должен сделать об этом> ??

+1

Добро пожаловать в StackOverflow! Отформатируйте свой код правильно. – peterm

ответ

2

Если вы хотите вернуть несколько результатов, вы должны подумать об использовании , а не подзапросов, а не. Inner Join выглядит примерно так:

SELECT * 
FROM HumanResources.Employee AS e 
INNER JOIN Person.Person AS p 
ON e.BusinessEntityID = p.BusinessEntityID 

это будет производить столько строк, могут быть получены путем сопоставления строк из каждой таблицы по условию ON основе (например, если есть две строки в Employee с BusinessEntityID 1, и три ряда в Person с BusinessEntityID из 1, выше будет производить шесть строк в результирующем наборе, где BusinessEntityID является 1)

+0

В то же время я ищу ответ, который использует SubQueries вместо Joins в соответствии с бизнес-требованием – OneThinker

+2

@OneThinker - поскольку подзапрос в предложении select * не может * вернуть более одного значения, вам нужно решить, дает результаты, которые я хочу », и« есть требование ** бизнеса **, что я использую подзапросы »- поскольку я не могу понять, как второй из них имеет смысл, я бы пошел первым. –