【问题标题】:SQL Server 2008 R2 query need guidanceSQL Server 2008 R2 查询需要指导
【发布时间】:2013-03-19 00:33:00
【问题描述】:
SELECT 
    A.First_Name, b.First_Name, A.DOB, B.DOB, A.Token, B.Token, 
    DATEDIFF(YEAR, A.DOB, B.DOB)                        -
    (CASE
       WHEN DATEADD(YY, DATEDIFF(YEAR, A.DOB, B.DOB), A.DOB) > Getdate() 
         THEN 1                                        
         ELSE 0 END) 'Age Difference' 
FROM 
   Boys_details A , Girls_details B
WHERE
   a.Cast = 'brahmin'
   AND A.City = 'pune'
   AND a.Height >= B.Height
   AND a.Salary >= B.salary

输出:

Nilesh  Ruchita 1973-01-21  1964-12-01  9   89  -9
Nilesh  Smitha  1973-01-21  1976-07-30  9   77  3
Nilesh  Richa   1973-01-21  1974-04-21  9   2   1

我不希望在 output 中出现负值,但它仍然可以作为诸如身高和薪水之类的条件之一令人满意,但如果年龄增长,它们就会失败。所以失败的人不想在o / p中显示它们请帮助我。

【问题讨论】:

    标签: sql sql-server select sql-server-2008-r2


    【解决方案1】:

    在子查询中怎么样?

    SELECT  *
    FROM
            (
                SELECT  A.First_Name,
                        b.First_Name,
                        A.DOB,
                        B.DOB,
                        A.Token,
                        B.Token, 
                        DATEDIFF(YEAR,A.DOB,B.DOB) -
                            (CASE WHEN DATEADD(YY,DATEDIFF(YEAR,A.DOB,B.DOB),A.DOB)> Getdate() 
                                    THEN 1                                        
                                    ELSE 0 
                            END) AS [Age Difference] 
                from    Boys_details A , 
                        Girls_details B
                where   a.Cast='brahmin' and 
                        A.City='pune' and 
                        a.Height >= B.Height and 
                        a.Salary>=B.salary
            ) s
    WHERE [Age Difference] >= 0
    

    【讨论】:

      【解决方案2】:

      只需将你的 case 语句添加到你的 where 子句中:

      SELECT 
          A.First_Name, b.First_Name, A.DOB, B.DOB, A.Token, B.Token, 
          DATEDIFF(YEAR, A.DOB, B.DOB)                        -
          (CASE
             WHEN DATEADD(YY, DATEDIFF(YEAR, A.DOB, B.DOB), A.DOB) > Getdate() 
               THEN 1                                        
               ELSE 0 END) 'Age Difference' 
      FROM 
        Boys_details A , Girls_details B
      WHERE
         a.Cast = 'brahmin'
         AND A.City = 'pune'
         AND a.Height >= B.Height
         AND a.Salary >= B.salary
         AND (CASE WHEN DATEADD(YY, DATEDIFF(YEAR, A.DOB, B.DOB), A.DOB) > Getdate() 
           THEN 1                                        
           ELSE 0 END) => 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多