日期:2014-05-18  浏览次数:20475 次

这个SQL把我难住了,高手们进来看一下,统计和字符串处理的问题。。
有这样几个表:
档位表:

MarketID               BoothID               BoothType
440308005021           1                             猪肉
440308005021           2                             猪肉
440308005021           3                             猪肉
440308005021           4                             猪肉
440308005021           5                             猪肉
440308005021           6                             猪肉

票据表:
MarketUID           BoothID                 BillNo                           Date
440308005021           1                         AACB39494040             2006-01-01
440308005021           2                         AACR39494040             2006-01-01
440308005021           4                         AACC39445640             2006-01-01

预警表:

MarketUID         BoothUID           Date                 FeedBack
440308005021           3                 2006-01-01       有票,编码是AACB39494040.
440308005021           6                 2006-01-01       停业.

====================================================
现在要求统计出这样的效果:

MarketUID           BoothUID         Date         BillNo         FeedBack       IsExisted

主要有这几个要点:
1.统计全年440308005021市场所有猪肉档的票据和预警情况;
2.根据档位在票据表中查找,如果当天有票,则在结果集中BillNo字段列出BillNo,
    如果在票据表中找不到,则在预警表中找,如果找到就在结果集feedback中显示;
    都找不到,就显示空;
3.如果预警中有记录,从feedback中提出票据编码,再在票据表中查询,如果存在此票,在isexisted字段显示true,否则显示false;
==================================================
第三个问题不太好弄啊。




------解决方案--------------------
試下
substring(C.FeedBack, patindex( '%[0-9A-z]% ',C.FeedBack),len(C.FeedBack)-patindex( '%[0-9A-z]% ',C.FeedBack))

exg:
--假設以句號 '. '結尾,並且緊跟票據
--如果不是,只要reverse(@s),然後找出來第一個數字或字母,再計算

declare @s varchar(100)
set @s= '我是,票據是ADSF88888832. '
select substring(@s, patindex( '%[0-9A-z]% ',@s),len(@s)-patindex( '%[0-9A-z]% ',@s))

/*
----------------