此SQL巨头晕,大家来瞧瞧
本帖最后由 s63403048 于 2012-12-04 17:02:36 编辑
select distinct (A.CARDID),
A.CARDNO,
A.MEMBERID,
C.MEMBERNO,
C.MemberName,
C.IDNO,
D.cardName,
A.KEEPAMT,
C.Point,
C.STATUS,
A.AMT,
A.TOTAMT,
A.CONSUMAMT,
A.TICKETAMT,
A.CREATEDATE,
A.LASTMODIDATE,
A.VALIDDATE,
A.CARDPROP
from BasCardInfo A
left join BasMemberInfo C
on A.MEMBERID = C.MEMBERID, CardType D,
(select BranCode, cardid, trunc(saledate) as etrunc
from PosItemH
where saledate between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')
and abs(amt) >= 1) E,
(select trunc(saledate) as ftrunc, BranCode, cardid, count(1)
from PosItemH
where trunc(saledate) between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')
group by trunc(saledate), cardid, brancode
having 1 = 1 and count(1) > 1 and brancode in (select BranCode
from BasBranInfo
start with BranCode = '00'
connect by prior
BranCode =
PBranCode)) F
where A.type = D.cardid
and A.cardid = E.cardid
and A.cardid = F.cardid
and A.CARDNO = '80114141'
and C.memberid =
(select memberid from bascardinfo a where a.cardno = '80114141')
and e.etrunc = f.ftrunc
order by A.CardNO
A.CARDPROP
from (select * from BasCardInfo where A.CARDNO = '80114141' ) A
left join (select *
from BasMemberInfo where memberid =(select memberid from bascardinfo a where a.cardno = '80114141')
) C on A.MEMBERID = C.MEMBERID,
inner join CardType D on A.type = D.cardid
inner join(select e.BranCode BranCodew,e.cardid,e.etrunc,f.BranCode BranCodef,f.counts
from
(select BranCode, cardid, trunc(saledate) as etrunc
from PosItemH
where saledate between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')and abs(amt) >= 1
) E
inner join
( select trunc(saledate) as ftrunc, BranCode, cardid, count(1) counts
from PosItemH
where trunc(saledate) between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')
and brancode in (select BranCode
from BasBranInfo
start with BranCode = '00'
connect by prior BranCode =PBranCode
)
group by trunc(saledate), cardid, brancode
having count(1) > 1
) F on e.etrunc = f.ftrunc and e.cardid=f.cardid) w
on A.cardid = w.cardid
order by A.CardNO
[其他解释]
A 表和 C 表没有连接条件。。。
结果是不是C表中有多少条数据,就重复多少条。。
[其他解释]
select c.CardID,
m.memberno,
c.CardNO,
m.MemberName,
c.brancode
[其他解释]
'-'
[其他解释]
b.branname bran,
m.IDNO,
tp.cardname,
c.Status,
m.point
from basmemberinfo m, basbraninfo b, bascardinfo c, cardtype tp,
(select *
from ( select f.cardid, f.brancode,count(f.cardid)
countall,sum(point) sumall from accountpoint f
where BranCode like '%00%'
and CDate >= to_date('2004-12-01', 'yyyy-mm-dd')
and CDate < to_date('2012-12-03', 'yyyy-mm-dd') + 1
group by f.cardid, f.brancode) h
where 1 = 1
and countall > 1
and sumall > 1 ) h where
m.memberid = c.memberid
and c.type = tp.cardid
and c.brancode = b.brancode
and c.cardid = h.cardid
and c.memberid =
(select memberid from bascardinfo a where a.cardno = '80106069')
order by c.cardno
A.type = D.cardid ----主建关联确定唯一的一条记录
and A.cardid = E.cardid --主建关联确定唯一的一条记录
and A.cardid = F.cardid -- 主建关联确定唯一的一条记录and A.CARDNO = '80114141'
and C.memberid =
(select memberid from bascardinfo a where a.cardno = '80114141') and e.etrunc = f.ftrunc
select c.CardID,
m.memberno,
c.CardNO,
m.MemberName,
c.brancode
[其他解释]
b.branname bran,
m.IDNO,
tp.cardname,
c.Status,
m.point
from basmemberinfo m, basbraninfo b, bascardinfo c, cardtype tp,
(select *
from ( select f.cardid, f.brancode,count(f.cardid)
countall,sum(point) sumall from accountpoint f
where BranCode like '%00%'
and CDate >= to_date('2004-12-01', 'yyyy-mm-dd')
and CDate < to_date('2012-12-03', 'yyyy-mm-dd') + 1
group by f.cardid, f.brancode) h
where 1 = 1
and countall > 1
and sumall > 1 ) h where
m.memberid = c.memberid
and c.type = tp.cardid
and c.brancode = b.brancode
and c.cardid = m.cardid
and c.CARDNO = '80114141'
and c.memberid =
(select memberid from bascardinfo a where a.cardno = '80106069')
order by c.cardno
select distinct (A.CARDID),
A.CARDNO,
A.MEMBERID,
C.MEMBERNO,
C.MemberName,
C.IDNO,
D.cardName,
A.KEEPAMT,
C.Point,
C.STATUS,
A.AMT,
A.TOTAMT,
A.CONSUMAMT,
A.TICKETAMT,
A.CREATEDATE,
A.LASTMODIDATE,
A.VALIDDATE,
A.CARDPROP
from BasCardInfo A
left join BasMemberInfo C
on A.MEMBERID = C.MEMBERID
and A.cardno= C.cardno -- 加这儿。。或者你懂得。。
, CardType D,
(select BranCode, cardid, trunc(saledate) as etrunc
from PosItemH
where saledate between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')
and abs(amt) >= 1) E,
(select trunc(saledate) as ftrunc, BranCode, cardid, count(1)
from PosItemH
where trunc(saledate) between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')
group by trunc(saledate), cardid, brancode
having 1 = 1 and count(1) > 1 and brancode in (select BranCode
from BasBranInfo
start with BranCode = '00'
connect by prior
BranCode =
PBranCode)) F
where A.type = D.cardid
and A.cardid = E.cardid
and A.cardid = F.cardid
and A.CARDNO = '80114141'
and C.memberid =
(select memberid from bascardinfo a where a.cardno = '80114141')
and e.etrunc = f.ftrunc
order by A.CardNO
select distinct (A.CARDID),
A.CARDNO,
A.MEMBERID,
C.MEMBERNO,
C.MemberName,
C.IDNO,
D.cardName,
A.KEEPAMT,
C.Point,
C.STATUS,
A.AMT,
A.TOTAMT,
A.CONSUMAMT,
A.TICKETAMT,
A.CREATEDATE,
A.LASTMODIDATE,
A.VALIDDATE,
A.CARDPROP
from BasCardInfo A
left join BasMemberInfo C
on A.MEMBERID = C.MEMBERID, CardType D,
(select BranCode, cardid, trunc(saledate) as etrunc
from PosItemH
where saledate between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')
and abs(amt) >= 1) E,
(select trunc(saledate) as ftrunc, BranCode, cardid, count(1)
from PosItemH
where trunc(saledate) between to_date('2004-12-01', 'yyyy-mm-dd') and
to_date('2012-12-04', 'yyyy-mm-dd')
group by trunc(saledate), cardid, brancode
having 1 = 1 and count(1) > 1 and brancode in (select BranCode
from BasBranInfo
start with BranCode = '00'
connect by prior
BranCode =
PBranCode)) F
where A.type = D.cardid
and A.cardid = E.cardid
and A.cardid = F.cardid
and A.CARDNO = '80114141'
and C.memberid =
(select memberid from bascardinfo a where a.cardno = '80114141')
and e.etrunc = f.ftrunc
order by A.CardNO
select
/*c.CardID,
m.memberno,
c.CardNO,
m.MemberName,
c.brancode
[其他解释]
(select *
from ( select f.cardid, f.brancode,count(f.cardid)
countall,sum(point) sumall from accountpoint f
where BranCode like '%00%'
and CDate >= to_date('2004-12-01', 'yyyy-mm-dd')
and CDate < to_date('2012-12-03', 'yyyy-mm-dd') + 1
group by f.cardid, f.brancode) h
where 1 = 1
and countall > 1
and sumall > 1 ) h
where
m.memberid = c.memberid
-- and c.type = tp.cardid
-- and c.brancode = b.brancode
-- and c.cardid = h.cardid
-- and c.memberid =
-- (select memberid from bascardinfo a where a.cardno = '80106069')
order by c.cardno
然后逐步打开where注释部分的条件。。。。
[其他解释]
'-'
[其他解释]