首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何连接来自三个不同别名的字符串值并在SQL Server中查找最小值

如何连接来自三个不同别名的字符串值并在SQL Server中查找最小值
EN

Stack Overflow用户
提问于 2019-03-27 08:38:00
回答 1查看 72关注 0票数 -1

我在SQL Server 2008中工作。我必须在三个可能的字符串值中找到字符串类型的最小值。如果值来自表的单个列,我知道如何执行此操作。在我的例子中,它来自三个不同的别名。

这是SQL的一部分:

代码语言:javascript
复制
SELECT 
    CustomerId,
    leaseType = (CASE 
                    WHEN MIN(CONCAT(L1.LeaseType, L2.LeaseType, L3.LeaseType)) = 'T' 
                       THEN 'Temporary' 
                    WHEN MIN(CONCAT(L1.LeaseType, L2.LeaseType, L3.LeaseType)) = 'P' 
                       THEN 'Permanant'  
                    WHEN MIN(CONCAT(L1.LeaseType, L2.LeaseType, L3.LeaseType)) = 'U'  
                       THEN 'Unknown' 
                    ELSE '' 
                 END)
FROM
    Customer
INNER JOIN 
    (SELECT
         CustomerId, LeaseType 
     FROM
         Lease 
     WHERE
         LeaseType  = 'T') L1 ON L1.CustomerId  = c.CustomerId  
INNER JOIN 
    (SELECT
         CustomerId, LeaseType  
     FROM
         Lease 
     WHERE
         LeaseType = 'P') L2 ON L2.CustomerId = c.CustomerId
INNER JOIN 
    (SELECT
         CustomerId, LeaseType  
     FROM
         Lease 
     WHERE
         LeaseType  = 'U') L3 ON L3.CustomerId = c.CustomerId
WHERE 
    CustomerId > 10000

但是,该查询不起作用。在其他错误中,它还抛出

'CONCAT‘不是可识别的内置函数名

EN

回答 1

Stack Overflow用户

发布于 2019-03-27 08:42:42

如果您想要租赁类型的“最小值”,您可以使用apply

代码语言:javascript
复制
SELECT . . .
FROM Customer c JOIN
     Lease lt
     ON lt.CustomerId = c.CustomerId AND
        lt.LeaseType  = 'T' JOIN
     Lease lp
     ON lp.CustomerId = c.CustomerId AND
        lp.LeaseType  = 'P' JOIN
     Lease lu
     ON lu.CustomerId = c.CustomerId AND
        lu.LeaseType  = 'U' CROSS APPLY
     (SELECT MIN(v.LeaseType) as LeaseType
      FROM (VALUES (lt.LeaseType), (lp.LeaseType), (lu.LeaseType)
     ) v(LeaseType)

这就回答了您提出的问题。但我怀疑它不会做任何有用的事情,因为它总是返回'P‘。为什么?所有的JOIN都是内连接,所以它们需要一个匹配。LeaseTypeJOIN条件中使用,因此需要匹配。这只匹配拥有所有这三个参数的客户。

我可以推测您可能想要外部连接。不过,与其猜测,不如用样本数据、期望的结果和对您真正想要实现的目标的解释来问另一个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55368150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档