2013-06-22 2 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 하위 쿼리

지금 나는 다음과 같이 위의 열을 교체하려면 위의 열을 변경 (이름이 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]) 

는 다음 날

하위 쿼리가 더 t를 반환하는 오류를 제공 한 하나 개의 값

이 코드는 더 하나 개의 값보다 반환하도록되어

난> 그럼 어떻게해야?

+1

Welcome to StackOverflow! 코드를 올바르게 포맷하십시오. – peterm

답변

2

여러 결과를 다시 가져 오려면 서브 쿼리가 아닌 조인을 사용하는 것이 좋습니다. Inner Join 같은 :

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

이 (예를 들어 1 BusinessEntityIDEmployee 두 행이 경우, 상기 ON 조건에 기초하여 각 테이블의 행을 일치시켜 제조 할 수만큼의 열을 생성 할 것이다 의 행 3 개, BusinessEntityID이 1 인 경우 위의 결과 집합에서 6 행을 생성하며 BusinessEntityID이 1 인 경우

+0

동시에 비즈니스 요구 사항에 따라 조인 대신 SubQueries를 사용하는 대답을 찾고 있습니다 – OneThinker

+2

@OneThinker - select 절의 하위 쿼리 *가 둘 이상의 값을 반환 할 수 없기 때문에 " 내가 원하는 결과를 낳는다. "그리고"하위 쿼리를 사용하는 ** 비즈니스 ** 요구 사항이있다. "-이 두 번째가 의미가있는 것을 짐작할 수 없기 때문에 나는 첫 번째 결과를 얻을 것이다. –