Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果在列中有给定值,则从每个组中选择一条记录,否则选择任何一条记录_Sql_Sql Server_Join_Aggregate Functions - Fatal编程技术网

Sql 如果在列中有给定值,则从每个组中选择一条记录,否则选择任何一条记录

Sql 如果在列中有给定值,则从每个组中选择一条记录,否则选择任何一条记录,sql,sql-server,join,aggregate-functions,Sql,Sql Server,Join,Aggregate Functions,卖主 供应商详情 VendorID | City 1 LosAngels 2 HongKong 主价值观 VendorDetailID | DetailCity | VendorID 11 Cairo 1 12 MosCow 1 13 Budapest 1 14 NewDelhi

卖主

供应商详情

VendorID  |   City
  1         LosAngels
  2         HongKong
主价值观

VendorDetailID |  DetailCity  | VendorID
      11          Cairo       1      
      12         MosCow       1
      13         Budapest     1
      14         NewDelhi     2
      15         Cairo        2
查询应返回每组VendorID的记录。如果其任何记录在DetailCity列中具有该值,则城市应为@GivenCityValue,否则城市应为Vendor表的City列中的值

这可以通过子查询和Case-When表达式实现

  Text    | Value
LosAngels    LA
HongKong     HK
Cairo        CA
MosCow       Mo
Budapest     BU
NewDelhi     ND
如果城市的给定值为@GivenCityValue='Moscow',则所需结果为

SELECT VendorID,
   (SELECT Text FROM Mastervalues 
    Where Value IN(CASE WHEN (SELECT COUNT(*) 
                         FROM VendorDetail 
                         WHERE VendorID  = Vendor.VendorID AND DetailCity = @GivenCityValue)>0 
                    THEN  @GivenCityValue  
                    ELSE  Vendor.City END)) AS City 
   FROM Vendor
但我正在尝试加入自己。我们需要任何用户定义的聚合函数吗? 使用join有什么办法吗?

试试这个-

VendorID | City
  1         MO
  2         HK
SELECT VendorID
     , City
FROM Vendor
OUTER APPLY (
    SELECT City = [text]
    FROM Mastervalues
    WHERE EXISTS(
        SELECT COUNT(*)
        FROM VendorDetail
        WHERE VendorID = Vendor.VendorID
            AND DetailCity = @GivenCityValue
            AND value = DetailCity
    ) OR Vendor.City = value
) t