sql,根据以下数据做表 type nmTime nmPrice Y Oover 90 1.430 Y 73 ~90 1.400 Y 61~72 1.120 Y 52~60 0.930 Y 46~51 0.800 Y 41~45 0.700 Y 37~40 0.620 Y 33~36 0.560 Y 31~32 0.510 Y 26~30 0.470 Y 21~25 0.400 Y 16~20 0.310 Y 11~15 0.230 Y 06~10 0.160 Y 04~05 0.080 Y 00~03 0.050 temp1表存在多组数据type为Y,nmTime时间不等,字段nmPrice需要根据nmTime大小算出nmPrice大小
时间: 2023-10-22 15:06:39 浏览: 181
以下是根据提供的数据创建表并计算 `nmPrice` 的SQL语句:
```sql
CREATE TABLE tblPrice (
chType CHAR(1),
nmTimeFrom INT,
nmTimeTo INT,
nmPrice DECIMAL(10, 3)
);
INSERT INTO tblPrice (chType, nmTimeFrom, nmTimeTo, nmPrice)
VALUES
('Y', 90, NULL, 1.430),
('Y', 73, 90, 1.400),
('Y', 61, 72, 1.120),
('Y', 52, 60, 0.930),
('Y', 46, 51, 0.800),
('Y', 41, 45, 0.700),
('Y', 37, 40, 0.620),
('Y', 33, 36, 0.560),
('Y', 31, 32, 0.510),
('Y', 26, 30, 0.470),
('Y', 21, 25, 0.400),
('Y', 16, 20, 0.310),
('Y', 11, 15, 0.230),
('Y', 6, 10, 0.160),
('Y', 4, 5, 0.080),
('Y', 0, 3, 0.050);
```
上述代码创建了一个名为 `tblPrice` 的新表,并将提供的数据插入其中。该表包含了四个字段:`chType`(字符类型,长度为1,用于存储工艺类型的编码)、`nmTimeFrom`(整数类型,用于存储时间范围的起始值)、`nmTimeTo`(整数类型,用于存储时间范围的结束值)、`nmPrice`(数字类型,长度为10,小数位为3,用于存储单价)。
请注意,对于时间范围的最大值,我将其设置为 NULL,表示没有上限。这样,可以适应不同范围的时间。你可以根据具体的需求修改这些数据。
接下来,你可以根据 `temp1` 表中的 `type` 和 `nmTime` 的值与 `tblPrice` 表进行匹配,并计算出相应的 `nmPrice` 值。你可以使用以下查询语句:
```sql
SELECT t1.*, t2.nmPrice
INTO #temp2
FROM #temp1 t1
LEFT JOIN tblPrice t2 ON t1.chType = t2.chType AND t1.nmTime BETWEEN t2.nmTimeFrom AND ISNULL(t2.nmTimeTo, t1.nmTime);
```
上述查询语句将根据 `#temp1` 表中的 `chType` 和 `nmTime` 的值与 `tblPrice` 表进行匹配,并将匹配到的 `nmPrice` 值加入到临时表 `#temp2` 中。请注意,我使用了 LEFT JOIN 来处理可能没有匹配到价格的情况。如果没有匹配到价格,将使用默认值 NULL。
最终的结果将存储在临时表 `#temp2` 中,其中包括了 `#temp1` 表的所有字段以及计算得出的 `nmPrice` 值。
阅读全文