用于选择具有条件的字段的SQL查询

时间:2014-09-14 09:03:09

标签: sql sql-server-2005

BILL_NO COUTER TRANTYPE BARCODE DES                  TRANAMT 
164     1      V        21021   ALOKOZAY TISSUE 150S (3.50) 
164     1      s        21021   210521 CABAGE         5.00 
164     1      C        CASH    CASH                  1.50 
208     2      V        120110  NATCO ORANGE MARMALA (6.75) 
208     2      S        120110  NATCO ORANGE MARMALA  6.75 
208     2      C        CASH    CASH                   -
164     3      S        5404568 FRESH FISH           18.00 
164     3      S        5406464 ARYAA IDLY/DOSA MIX   5.00 
164     3      S        654954  DETTOL SENSITIVE 125  7.00 
164     3      C        CASH    CASH                 30.00 

我希望从我的表中选择bill no,其中trantype =' v'

但我需要下面提到的结果谢谢

BILL_NO COUTER TRANTYPE BARCODE DES                  TRANAMT 
164     1      V        21021   ALOKOZAY TISSUE 150S (3.50) 
164     1      s        21021   210521 CABAGE         5.00 
164     1      C        CASH    CASH                  1.50 
208     2      V        120110  NATCO ORANGE MARMALA (6.75) 
208     2      S        120110  NATCO ORANGE MARMALA  6.75

2 个答案:

答案 0 :(得分:1)

这对我来说并不完全清楚,但我认为你想要这样的事情:

select t1.*
from the_table t1
where exists (select 42
              from the_table t2
              where t2.bill_no = t1.bill_no
                and t2.trantype = 'V'
                and t2.couter = t1.couter);

这也会返回bill_no = 208trantype = 'C'(这不是示例输出的一部分)。但是,由于你没有解释那个缺失的行,所以很难写出一个合适的解决方案。

答案 1 :(得分:0)

假设Bill_no 208缺少的行只是一个拼写错误,以下解决方案可能有所帮助:

WITH cte AS
(
 SELECT BILL_NO, COUNTER
 FROM YourTable WHERE TRANTYPE ='V'
)
SELECT yt.*
FROM YourTable yt
INNER JOIN cte ON yt.BILL_NO = cte.BILL_NO AND yt.COUNTER=cte.COUNTER