--问题﹕我把参数表存到数据库中了(如测试环境)﹐如何根据给定的参数值去查参数表?
--如何求最后一个参数的最小值? 前提条件﹕根据最后一个参数前面各参数的值去找﹐前面各参数是已知的﹐最后一个参数是要找的
--例如1﹕根据已知参数181﹑182﹑183(其值分别为4﹑0.22﹑20)﹐去找出参数编号为3的最小值(3)
--例如2﹕根据已知参数181﹑182﹑183(其值分别为6﹑0.25﹑49)﹐去找出参数编号为3的最小值(1)--创建测试环境
CREATE TABLE [dbo].[tblYW_Parameter] (
[参数表编号] [int] IDENTITY (1, 1) NOT NULL ,
[参数编号] [int] NOT NULL ,
[参数表名称] [varchar] (100) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[单位] [varchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[级数] [smallint] NULL ,
[公式] [varchar] (200) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[备注] [varchar] (500) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[参数表类型] [bit] NULL ,
[维护人] [varchar] (8) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[维护时间] [datetime] NULL 
) ON [PRIMARY]
GOCREATE TABLE [dbo].[tblYW_Parameter_Son] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[参数表编号] [int] NOT NULL ,
[序号] [smallint] NOT NULL ,
[参数编号] [int] NOT NULL ,
[记录数] [smallint] NOT NULL ,
[比较1] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[最小值] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[比较2] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[最大值] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL 
) ON [PRIMARY]
GOALTER TABLE [dbo].[tblYW_Parameter] WITH NOCHECK ADD 
CONSTRAINT [PK_tblYW_Parameter] PRIMARY KEY  CLUSTERED 
(
[参数表编号]
)  ON [PRIMARY] 
GOALTER TABLE [dbo].[tblYW_Parameter_Son] WITH NOCHECK ADD 
CONSTRAINT [PK_tblYW_Parameter_Son] PRIMARY KEY  CLUSTERED 
(
[参数表编号],
[序号],
[参数编号],
[记录数]
)  ON [PRIMARY] 
GOALTER TABLE [dbo].[tblYW_Parameter] WITH NOCHECK ADD 
CONSTRAINT [DF_tblYW_Parameter_单位] DEFAULT ('') FOR [单位],
CONSTRAINT [DF_tblYW_Parameter_级数] DEFAULT (0) FOR [级数],
CONSTRAINT [DF_tblYW_Parameter_公式] DEFAULT ('') FOR [公式],
CONSTRAINT [DF_tblYW_Parameter_备注] DEFAULT ('') FOR [备注],
CONSTRAINT [DF_tblYW_CostFactor_参数类型] DEFAULT (1) FOR [参数表类型],
CONSTRAINT [DF_tblYW_CostFactor_维护人] DEFAULT ('') FOR [维护人],
CONSTRAINT [DF_tblYW_CostFactor_维护时间] DEFAULT (getdate()) FOR [维护时间]
GOALTER TABLE [dbo].[tblYW_Parameter_Son] WITH NOCHECK ADD 
CONSTRAINT [DF_tblYW_Parameter_Son_序号] DEFAULT (0) FOR [序号]
GOALTER TABLE [dbo].[tblYW_Parameter_Son] ADD 
CONSTRAINT [FK_tblYW_Parameter_Son_tblYW_Parameter] FOREIGN KEY 
(
[参数表编号]
) REFERENCES [dbo].[tblYW_Parameter] (
[参数表编号]
) ON DELETE CASCADE  ON UPDATE CASCADE 
GO--测试数据
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,0,'181','1','>=','2','<=','6')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,1,'182','1','>=','0.20','<=','0.25')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,2,'183','1','>','0','<=','24')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,3,'3','1','>=','3','<=','3')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,0,'181','2','>=','2','<=','6')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,1,'182','2','>=','0.20','<=','0.25')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,2,'183','2','>','24','<=','32')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,3,'3','2','>=','2','<=','2')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,0,'181','3','>=','2','<=','6')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,1,'182','3','>=','0.20','<=','0.25')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,2,'183','3','>','32','<=','40')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,3,'3','3','>=','2','<=','2')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,0,'181','4','>=','2','<=','6')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,1,'182','4','>=','0.20','<=','0.25')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,2,'183','4','>','40','<=','48')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,3,'3','4','>=','1','<=','1')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,0,'181','5','>=','2','<=','6')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,1,'182','5','>=','0.20','<=','0.25')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,2,'183','5','>','48','<=','59')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,3,'3','5','>=','1','<=','1')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,0,'181','6','>=','2','<=','6')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,1,'182','6','>=','0.20','<=','0.25')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,2,'183','6','>','59','<=','63')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,3,'3','6','>=','1','<=','1')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,0,'181','7','>=','2','<=','6')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,1,'182','7','>=','0.20','<=','0.25')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,2,'183','7','>','63','<=','9999')
insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
VALUES(4,3,'3','7','>=','1','<=','1')select * from tblYW_Parameter_Son order by 记录数,序号

解决方案 »

  1.   

    INSERT 语句与 COLUMN FOREIGN KEY 约束 'FK_tblYW_Parameter_Son_tblYW_Parameter' 冲突。该冲突发生于数据库 'tempdb',表 'tblYW_Parameter', column '参数表编号'。
    语句已终止。
      

  2.   

    --不好意思
    --主表忘記插入數據了﹐在--測試數據前﹐先執行下面語句insert tblYW_Parameter(参数编号,参数表名称,单位,级数) values(3,'钻孔课垒板参数表','PNL',3)
      

  3.   

    --正确的创建测试环境
    CREATE TABLE [dbo].[tblYW_Parameter] (
    [参数表编号] [int] IDENTITY (1, 1) NOT NULL ,
    [参数编号] [int] NOT NULL ,
    [参数表名称] [varchar] (100) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    [单位] [varchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
    [级数] [smallint] NULL ,
    [公式] [varchar] (200) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
    [备注] [varchar] (500) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    [参数表类型] [bit] NULL ,
    [维护人] [varchar] (8) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
    [维护时间] [datetime] NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[tblYW_Parameter_Son] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [参数表编号] [int] NOT NULL ,
    [序号] [smallint] NOT NULL ,
    [参数编号] [int] NOT NULL ,
    [记录数] [smallint] NOT NULL ,
    [比较1] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
    [最小值] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
    [比较2] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
    [最大值] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL 
    ) ON [PRIMARY]
    GOALTER TABLE [dbo].[tblYW_Parameter] WITH NOCHECK ADD 
    CONSTRAINT [PK_tblYW_Parameter] PRIMARY KEY  CLUSTERED 
    (
    [参数表编号]
    )  ON [PRIMARY] 
    GOALTER TABLE [dbo].[tblYW_Parameter_Son] WITH NOCHECK ADD 
    CONSTRAINT [PK_tblYW_Parameter_Son] PRIMARY KEY  CLUSTERED 
    (
    [参数表编号],
    [序号],
    [参数编号],
    [记录数]
    )  ON [PRIMARY] 
    GOALTER TABLE [dbo].[tblYW_Parameter] WITH NOCHECK ADD 
    CONSTRAINT [DF_tblYW_Parameter_单位] DEFAULT ('') FOR [单位],
    CONSTRAINT [DF_tblYW_Parameter_级数] DEFAULT (0) FOR [级数],
    CONSTRAINT [DF_tblYW_Parameter_公式] DEFAULT ('') FOR [公式],
    CONSTRAINT [DF_tblYW_Parameter_备注] DEFAULT ('') FOR [备注],
    CONSTRAINT [DF_tblYW_CostFactor_参数类型] DEFAULT (1) FOR [参数表类型],
    CONSTRAINT [DF_tblYW_CostFactor_维护人] DEFAULT ('') FOR [维护人],
    CONSTRAINT [DF_tblYW_CostFactor_维护时间] DEFAULT (getdate()) FOR [维护时间]
    GOALTER TABLE [dbo].[tblYW_Parameter_Son] WITH NOCHECK ADD 
    CONSTRAINT [DF_tblYW_Parameter_Son_序号] DEFAULT (0) FOR [序号]
    GOALTER TABLE [dbo].[tblYW_Parameter_Son] ADD 
    CONSTRAINT [FK_tblYW_Parameter_Son_tblYW_Parameter] FOREIGN KEY 
    (
    [参数表编号]
    ) REFERENCES [dbo].[tblYW_Parameter] (
    [参数表编号]
    ) ON DELETE CASCADE  ON UPDATE CASCADE 
    GO--测试数据
    insert tblYW_Parameter(参数编号,参数表名称,单位,级数) values(3,'钻孔课垒板参数表','PNL',3)
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,0,'181','1','>=','2','<=','6')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,1,'182','1','>=','0.20','<=','0.25')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,2,'183','1','>','0','<=','24')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,3,'3','1','>=','3','<=','3')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,0,'181','2','>=','2','<=','6')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,1,'182','2','>=','0.20','<=','0.25')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,2,'183','2','>','24','<=','32')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,3,'3','2','>=','2','<=','2')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,0,'181','3','>=','2','<=','6')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,1,'182','3','>=','0.20','<=','0.25')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,2,'183','3','>','32','<=','40')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,3,'3','3','>=','2','<=','2')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,0,'181','4','>=','2','<=','6')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,1,'182','4','>=','0.20','<=','0.25')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,2,'183','4','>','40','<=','48')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,3,'3','4','>=','1','<=','1')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,0,'181','5','>=','2','<=','6')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,1,'182','5','>=','0.20','<=','0.25')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,2,'183','5','>','48','<=','59')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,3,'3','5','>=','1','<=','1')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,0,'181','6','>=','2','<=','6')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,1,'182','6','>=','0.20','<=','0.25')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,2,'183','6','>','59','<=','63')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,3,'3','6','>=','1','<=','1')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,0,'181','7','>=','2','<=','6')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,1,'182','7','>=','0.20','<=','0.25')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,2,'183','7','>','63','<=','9999')
    insert tblYW_Parameter_Son(参数表编号,序号,参数编号,记录数,比较1,最小值,比较2,最大值)
    VALUES(4,3,'3','7','>=','1','<=','1')select * from tblYW_Parameter_Son order by 记录数,序号
      

  4.   

    --你定义了下面这约束,哪能Insert to tblYW_Parameter_SonALTER TABLE [dbo].[tblYW_Parameter_Son] ADD 
    CONSTRAINT [FK_tblYW_Parameter_Son_tblYW_Parameter] FOREIGN KEY 
    (
    [参数表编号]
    ) REFERENCES [dbo].[tblYW_Parameter] (
    [参数表编号]
    ) ON DELETE CASCADE  ON UPDATE CASCADE 
    GO
      

  5.   

    涛涛,我觉得你的表结构有些问题,如果你这样建表的话,就无法判断你所谓参数编号的最小值,
    最多只能找到 (参数181﹑182﹑183)(其值分别为4﹑0.22﹑20)你所要求定义符合条件的ID,为3
                (参数181﹑182﹑183)(其值分别为6﹑0.25﹑49)你所要求定义符合条件的ID,为19
    按照你的表设计,ID+1的话可以满足,如果ID不是按1递增的话,就无法实现了
    我想要么建一些冗余字段,要么再建一个子表,来建立他们之间的关系,这样就可以实现.
    至于上面提到找到符合条件的ID,你可以通过动态SQL来实现,
    一点建议仅供参考
      

  6.   

    declare @num1 decimal
    declare @num2 decimal
    declare @num3 decimal
    declare @sql nvarchar(4000)
    set @num1=4
    set @num2=0.22
    set @num3=20set @sql='select * from tblYW_Parameter_Son where id=
             (select id from tblYW_Parameter_Son 
              where (case 参数编号 when ''183'' then 最大值 else 0 end )>='+convert(nvarchar(50),@num3)+ 
              ' and (case 参数编号 when ''183'' then 最小值 else 0 end )<='+convert(nvarchar(50),@num3)+ ')+1'
    exec (@sql)
    上面是按我的理解写的SQL,你看看就知道,其实前面两个参数都没用到,
    我还是觉得你的表结构有一些问题.
      

  7.   

    quanyi你沒弄懂我的意思﹐表結構沒有問題
    我的意思是﹕
    怎么樣能過參數181﹑182﹑183的值(已給定)﹐去找出參數3的值
    例如﹕如果給定参数181﹑182﹑183的值(分别为6﹑0.25﹑49)﹐則找出參數3的值為1﹔
    用一條SQL語句或存儲過程都行
      

  8.   

    實際的參數表是這樣的﹕(以前三筆記錄為例)
    層數(參數編號181)  鑽針直徑(參數編號182)  板厚(參數編號183) 壘板數(參數編號3)
    2至6層                           0.20~0.25mm                       0~24mm                 3片
    2至6層                           0.20~0.25mm                       24~32mm               2片
    2至6層                           0.20~0.25mm                       32~40mm               2片
    ...
    存儲到數據庫中是這樣的﹕
    id           參數表編號 序號    參數編號   記錄數    比較1        最小值        比較2        最大值
    176 4 0 181 1 >= 2 <= 6
    177 4 1 182 1 >= 0.20 <= 0.25
    178 4 2 183 1 > 0 <= 24
    179 4 3 3 1 >= 3 <= 3
    180 4 0 181 2 >= 2 <= 6
    181 4 1 182 2 >= 0.20 <= 0.25
    182 4 2 183 2 > 24 <= 32
    183 4 3 3 2 >= 2 <= 2
    184 4 0 181 3 >= 2 <= 6
    185 4 1 182 3 >= 0.20 <= 0.25
    186 4 2 183 3 > 32 <= 40
    187 4 3 3 3 >= 2 <= 2
      

  9.   

    層數(參數編號181)  鑽針直徑(參數編號182)  板厚(參數編號183) 壘板數(參數編號3)
    2至6層                           0.20~0.25mm                       0~24mm                 3片
    2至6層                           0.20~0.25mm                       24~32mm               2片
    2至6層                           0.20~0.25mm                       32~40mm               2片
    ...id           參數表編號 序號    參數編號   記錄數    比較1        最小值        比較2        最大值
    176 4 0 181 1 >= 2 <= 6
    177 4 1 182 1 >= 0.20 <= 0.25
    178 4 2 183 1 > 0 <= 24
    179 4 3 3 1 >= 3 <= 3
    180 4 0 181 2 >= 2 <= 6
    181 4 1 182 2 >= 0.20 <= 0.25
    182 4 2 183 2 > 24 <= 32
    183 4 3 3 2 >= 2 <= 2
    184 4 0 181 3 >= 2 <= 6
    185 4 1 182 3 >= 0.20 <= 0.25
    186 4 2 183 3 > 32 <= 40
    187 4 3 3 3 >= 2 <= 2
      

  10.   

    涛涛,不好意思,问题解决了吗,这几天放假,没时间上来,试试这个应该可以了
    declare @num1 decimal
    declare @num2 decimal
    declare @num3 decimal
    declare @sql nvarchar(4000)
    set @num1=4
    set @num2=0.22
    set @num3=20set @sql='select * from tblYW_Parameter_Son where 序号=''3'' and 记录数=(select a.记录数 from 
             (select * from tblYW_Parameter_Son 
              where 参数编号=''181'' and (case 参数编号 when ''181'' then convert(decimal,最大值) else 0 end )>='+convert(nvarchar(50),@num1)+ 
              ' and (case 参数编号 when ''181'' then convert(decimal,最小值) else 0 end )<='+convert(nvarchar(50),@num1)+ ') a  inner join 
             (select * from tblYW_Parameter_Son 
              where 参数编号=''182'' and (case 参数编号 when ''182'' then convert(decimal,最大值) else 0 end )>='+convert(nvarchar(50),@num2)+ 
              ' and (case 参数编号 when ''182'' then convert(decimal,最小值) else 0 end )<='+convert(nvarchar(50),@num2)+ ') b on a.记录数=b.记录数 inner join 
             (select * from tblYW_Parameter_Son 
              where 参数编号=''183'' and (case 参数编号 when ''183'' then convert(decimal,最大值) else 0 end )>='+convert(nvarchar(50),@num3)+ 
              ' and (case 参数编号 when ''183'' then convert(decimal,最小值) else 0 end )<='+convert(nvarchar(50),@num3)+ ') c on a.记录数=c.记录数 and b.记录数=c.记录数) '
           
    print @sql   
    exec (@sql)
      

  11.   

    最后一个符号改一下,否则会有重复的值declare @num1 decimal
    declare @num2 decimal
    declare @num3 decimal
    declare @sql nvarchar(4000)
    set @num1=4
    set @num2=0.22
    set @num3=40set @sql='select * from tblYW_Parameter_Son where 序号=''3'' and 记录数 = (select a.记录数 from 
             (select * from tblYW_Parameter_Son 
              where 参数编号=''181'' and (case 参数编号 when ''181'' then convert(decimal,最大值) else 0 end )>='+convert(nvarchar(50),@num1)+ 
              ' and (case 参数编号 when ''181'' then convert(decimal,最小值) else 0 end )<='+convert(nvarchar(50),@num1)+ ') a  inner join 
             (select * from tblYW_Parameter_Son 
              where 参数编号=''182'' and (case 参数编号 when ''182'' then convert(decimal,最大值) else 0 end )>='+convert(nvarchar(50),@num2)+ 
              ' and (case 参数编号 when ''182'' then convert(decimal,最小值) else 0 end )<='+convert(nvarchar(50),@num2)+ ') b on a.记录数=b.记录数 inner join 
             (select * from tblYW_Parameter_Son 
              where 参数编号=''183'' and (case 参数编号 when ''183'' then convert(decimal,最大值) else 0 end )>='+convert(nvarchar(50),@num3)+ 
              ' and (case 参数编号 when ''183'' then convert(decimal,最小值) else 0 end )<'+convert(nvarchar(50),@num3)+ ') c on a.记录数=c.记录数 and b.记录数=c.记录数) '
           
    print @sql   
    exec (@sql)
      

  12.   

    rockyljt(江濤)你好,你的公式问题给我好多分儿,谢谢,我也4个小绿三角了。呵呵。
    这个问题也很有意思,我觉得我对数据库分析方面还可以,对于你的这个问题我觉得长生天老兄说得不错,就是表结构有可以修改的地方。你现在的表结构数据冗余比较大并且结构不是很合理。
    也许是我对你们这个应用的理解还不到位,但如果你把重要的部分数据字典、应用在哪方面、解决方案能够说清些,我很愿意为你设计一个更合理的表结构。这样查询起来效率较高且方便,你意下如何?
    如果同意请给我发消息,且其中留下此帖地址:
    http://community.csdn.net/Expert/topic/4724/4724061.xml?temp=.9111444
    以便我容易找到此帖也容易回复。
      

  13.   

    謝謝各位了﹐我的問題已解決。
    我已有其他方法了﹐在前台處理的﹐至于在后台怎么處理﹐目前還沒來得及去想
    還請各位幫忙了。To:quanyi兄﹐你的方法有個問題﹕就是> 或<的情況沒有考慮進去﹐且不通用
    假如有20維的參數表的話那樣做很麻煩﹐且效率低(當然跟表結構設計會有關系的)To:geniusli(纠级天使) 
    那是你應得的分﹐是你給我有啟發而解決了問題。謝謝了。
    至于表結構﹐我仍覺得沒有問題。具體的文檔我發給你吧﹐你加我的QQ﹕275802562吧。
      

  14.   

    我记得在先前的公式贴里曾说,数据库就是为了存放数据,为了更好地存放数据,数据库需要设计很好的组织数据的格式,至于表现数据,那是前台的事儿,如果这个问题已经很好地解决了,就没有必要再后台处理了。
    另外,你发给我的excel表我会仔细研究一下,看有没有更好的组织数据的方法。