--问题﹕我把参数表存到数据库中了(如测试环境)﹐如何根据给定的参数值去查参数表?
--如何求最后一个参数的最小值? 前提条件﹕根据最后一个参数前面各参数的值去找﹐前面各参数是已知的﹐最后一个参数是要找的
--例如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﹕根据已知参数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 记录数,序号
语句已终止。
--主表忘記插入數據了﹐在--測試數據前﹐先執行下面語句insert tblYW_Parameter(参数编号,参数表名称,单位,级数) values(3,'钻孔课垒板参数表','PNL',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 记录数,序号
CONSTRAINT [FK_tblYW_Parameter_Son_tblYW_Parameter] FOREIGN KEY
(
[参数表编号]
) REFERENCES [dbo].[tblYW_Parameter] (
[参数表编号]
) ON DELETE CASCADE ON UPDATE CASCADE
GO
最多只能找到 (参数181﹑182﹑183)(其值分别为4﹑0.22﹑20)你所要求定义符合条件的ID,为3
(参数181﹑182﹑183)(其值分别为6﹑0.25﹑49)你所要求定义符合条件的ID,为19
按照你的表设计,ID+1的话可以满足,如果ID不是按1递增的话,就无法实现了
我想要么建一些冗余字段,要么再建一个子表,来建立他们之间的关系,这样就可以实现.
至于上面提到找到符合条件的ID,你可以通过动态SQL来实现,
一点建议仅供参考
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,你看看就知道,其实前面两个参数都没用到,
我还是觉得你的表结构有一些问题.
我的意思是﹕
怎么樣能過參數181﹑182﹑183的值(已給定)﹐去找出參數3的值
例如﹕如果給定参数181﹑182﹑183的值(分别为6﹑0.25﹑49)﹐則找出參數3的值為1﹔
用一條SQL語句或存儲過程都行
層數(參數編號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
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
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)
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)
这个问题也很有意思,我觉得我对数据库分析方面还可以,对于你的这个问题我觉得长生天老兄说得不错,就是表结构有可以修改的地方。你现在的表结构数据冗余比较大并且结构不是很合理。
也许是我对你们这个应用的理解还不到位,但如果你把重要的部分数据字典、应用在哪方面、解决方案能够说清些,我很愿意为你设计一个更合理的表结构。这样查询起来效率较高且方便,你意下如何?
如果同意请给我发消息,且其中留下此帖地址:
http://community.csdn.net/Expert/topic/4724/4724061.xml?temp=.9111444
以便我容易找到此帖也容易回复。
我已有其他方法了﹐在前台處理的﹐至于在后台怎么處理﹐目前還沒來得及去想
還請各位幫忙了。To:quanyi兄﹐你的方法有個問題﹕就是> 或<的情況沒有考慮進去﹐且不通用
假如有20維的參數表的話那樣做很麻煩﹐且效率低(當然跟表結構設計會有關系的)To:geniusli(纠级天使)
那是你應得的分﹐是你給我有啟發而解決了問題。謝謝了。
至于表結構﹐我仍覺得沒有問題。具體的文檔我發給你吧﹐你加我的QQ﹕275802562吧。
另外,你发给我的excel表我会仔细研究一下,看有没有更好的组织数据的方法。