2014-03-03 220 views
0

我有100列名称的表。 我想每个项目的第一个记录与特定的条件以sql中的条件获得第一条记录

我有列名 MODEL_NAME(车型名称约7至8种不同型号)

Credit_flag(Y/N)

Private_Offer( Y/N)

Cash_back(一些值或空白)

Bonus_cash(一些值或空白)

现在,如果我想第一个记录每个模型

其中Credit_flag等于肯定

其中private_offer等于肯定

其中cash_back等于某些不为空值

其中Bonus_cash等于一些不是空白值

Cars

+0

您是否有一个带有记录条目时间戳的列?如何区分两条记录是否符合条件?请张贴表格结构,样本数据和所需的输出。 – Koshera

+0

我将表格添加为图片 – user3348408

+0

@ user3348408是您的Excel文件的源代码,还是您只是将数据转储到Excel?如果Excel不是源代码,那么您使用的是哪种服务器软件(SQL Server/Oracle/etc)? –

回答

0

你不能只是得到第一个记录,你必须指定如何。例如,如果您尝试获取第一条记录,则在下次运行同一查询时可能会得到不同的结果,原因在于sql决定了获取行并实现它的最快方法,如果数据量增大,它可能会使用另一种方法。为了每次都能得到相同的结果,你应该通过排序数据后知道它必须得到第一个结果。

你可以使用类似于下面的语句,懒得写整个东西。但你应该明白这个主意。

select Top 1 column1, col2,col3 from table where col1 = 'Y' AND cashBack <> '' order by col1 
0

@ user1063280的响应假定您想要表中的单个行。您的问题更像是我想要为表格中的每个模型创建相关的行。如果这是你想要的东西,下面的查询应该实现自己的目标:

DECLARE @Cars TABLE 
(
    ID int IDENTITY, 
    CreditFlag bit, 
    PrivateOfferFlag bit, 
    ModelName varchar(3), 
    CashBack numeric(19,2), 
    BonusCash numeric(19,2), 
    TotalSavings AS CashBack + BonusCash 
); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (0, 1, 'AAA', 750, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (0, 1, 'BBB', 750, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (0, 1, 'CCC', 2500, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (1, 1, 'DDD', 750, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (0, 0, 'AAA', 1500, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (0, 0, 'BBB', 2000, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (1, 0, 'CCC', 3000, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (0, 0, 'DDD', 3000, 750); 
INSERT INTO @Cars (CreditFlag, PrivateOfferFlag, ModelName, CashBack, BonusCash) VALUES (0, 1, 'AAA', 750, 750); 

SELECT 
    * 
FROM  @Cars c1 
WHERE  ID = 
      (
       SELECT 
        TOP 1 ID 
       FROM  @Cars c2 
       WHERE  c2.ModelName = c1.ModelName 
       AND   c2.CreditFlag = 1 
       AND   c2.PrivateOfferFlag = 1 
       AND   c2.CashBack > 0 
       AND   c2.BonusCash > 0 
       ORDER BY ID 
      ); 

你能够提供你想在子查询的任何过滤,您可以指定任何命令你想。我添加了一个ID列,并选择了第一个这样的列。例如,您可以更复杂一些,可以通过TotalSavings降序排序。

相关问题