小编Sar*_*sam的帖子

MS SQL 2008 join - 从许多结果中选择一个

我正在尝试运行以下查询,但我不确定如何将其限制为仅一个结果.在下面的查询中,clientcontactid 21901工作的客户端有2个地址,意味着返回2个结果.

查询:

select  cc.contactpersonid,
    cc.clientcontactid,
    ad.city,
    ad.addressid
from SavedList sl
inner join ClientContacts cc on cc.ContactPersonId = sl.ObjectId
inner join Clients c on c.ClientID = cc.ClientId
inner join Address ad on c.ClientID = ad.ObjectId
where sl.SavedListId = 2117
Run Code Online (Sandbox Code Playgroud)

结果:

contactpersonid clientcontactid city    addressid
87934           21901                   145186
87934           21901           London  1130705
89778           17275           Leeds   145368
Run Code Online (Sandbox Code Playgroud)

我需要为客户联系21901返回其中一个结果,优先级是其中包含城市的结果.我已经尝试过选择top(1),但我认为这取决于连接强制多个记录.有关如何仅返回1个结果的任何帮助,以及如何控制它将受到高度赞赏!

谢谢

sql join sql-server-2008

4
推荐指数
1
解决办法
1446
查看次数

如何使用每日预定作业调用oracle中的存储过程?

我是oracle工作脚本的新手.我写了一些清除程序来清理所有旧数据并保留最近3个月的数据...程序执行成功.我也在手动调用时工作.程序如下:

CREATE OR REPLACE PROCEDURE Archive 
IS

       v_query varchar2(2048);
       v_tablename VARCHAR2(50);
       v_condition varchar2(50);
       TYPE cur_typ IS REF CURSOR;
       c cur_typ;
BEGIN 
    OPEN c for 'select tablename,columnname from pseb.purge_tables';
        FETCH c INTO v_tablename,v_condition;
        LOOP
           EXIT WHEN c%NOTFOUND;
           if(v_tablename ='cfw.DCTBLPERFCUMULATIVEMASTER') then
               v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB3MAINREG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
               execute immediate v_query;
               v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB4TODENERG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90'; …
Run Code Online (Sandbox Code Playgroud)

plsql oracle11g job-scheduling

4
推荐指数
1
解决办法
3万
查看次数

在mssql中选择case语句错误

SELECT top 1 
    case 
        when VR = -99999.99 
        then 0 
        else cast((VR*1.732) as decimal(38,3)) 
    end 
FROM pseb.dbo.datasource 
where FeederID=5003
order by datetime desc
Run Code Online (Sandbox Code Playgroud)

上面的查询工作正常,但我需要返回varchar值' - '而不是返回0

如果我喜欢那样的话

SELECT top 1 
    case 
        when VR = -99999.99 
        then '--' 
        else cast((VR*1.732) as decimal(38,3)) 
    end 
FROM pseb.dbo.datasource 
where FeederID=5003
order by datetime desc
Run Code Online (Sandbox Code Playgroud)

表示它返回以下错误:

消息8114,级别16,状态5,行1错误将数据类型varchar转换为数字.

请帮我解决一下

sql sql-server sql-server-2008

0
推荐指数
1
解决办法
2243
查看次数

如何在mssql 2008中的case语句中使用子查询

如果使用带有子查询的select case语句将else语句改为单个查询,我需要更改以下过程...

 if((select COUNT(*) from pseb.dbo.meterattributedetails where meterid=@meterid)=0)
  select @emf=EMF from pseb.dbo.METERMASTER where MeterID=@meterid
  else  if((select COUNT(*) from pseb.dbo.meterattributedetails where meterid=@meterid and dateadd(day,1,@fromdate)<DateTime)>0) 
    select top 1 @emf=oldvalue from pseb.dbo.meterattributedetails  where MeterID=@meterid and dateadd(day,1,@fromdate)<datetime order by DateTime 
     else 
  select top 1 @emf=newvalue from pseb.dbo.meterattributedetails  where meterid=@meterid and DateTime<@fromdate order by DateTime desc
Run Code Online (Sandbox Code Playgroud)

meterattribute表结构如下:

AttributeID AttributeName   Oldvalue    newvalue    DateTime    meterid
1           EMF         2.00000         4.00000        2012-07-05   4756
1           EMF         4.00000         6.00000        2012-07-10   4756
1           EMF         6.00000         8.00000        2012-07-15   4756
1           EMF         8.00000        10.00000 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server case subquery sql-server-2008

0
推荐指数
1
解决办法
4万
查看次数