日期:2014-05-19  浏览次数:20426 次

这样的查询如何来实现???在线等
表结构如下,表名     tblA

      结构如下:
              noid         fItemId         fQty1       fQty2
                10                 1                   5               0
                10                 2                   0                 10
                10                 3                   0                   5

                20                 1                   100               0
                20                 3                   0                 100
         
          noid   相同的相当于一张单据
          现要查fItemId=1     的数据
          (也就是说从tblA中找出所有fItemId=1的数据,再关联到tblA,
            关联的条件是fItemid <> 1   并且如果fItemId=1时fQty1 <> 0   ,则要取fQty2 <> 0   的数据,反之如果fItemId=1时fQty2 <> 0   则要取fQty1 <> 0的数据,并且只取第一条      
          查询结果如下:
       
          noid         fItemId1   fItemId2        
            10               1                   2  
            20               1                   3


------解决方案--------------------
--不知对不对

create table tblA(noid int, fItemId int, fQty1 int, fQty2 int)
insert tblA select 10, 1, 5, 0
union all select 10, 2, 0, 10
union all select 10, 3, 0, 5
union all select 20, 1, 100, 0
union all select 20, 3, 0, 100


select a.noid, a.fItemId,
fItemId2=(
select top 1 (case when a.fQty1 <> 0 and fQty2 <> 0 then fItemId when a.fQty2 <> 0 and fQty1 <> 0 then fItemId end)
from tblA where noid=a.noid and fItemId <> 1
)
from tblA as a
where a.fItemId=1

--result
noid fItemId fItemId2
----------- ----------- -----------
10 1 2
20 1 3

(2 row(s) affected)
------解决方案--------------------
‘并且只取第一条 ’应该是取最小的吧。

--创建测试环境
create table #tbla(noid i