我要点餐系统
我想这样做,当菜品的所有状态都是“COMPLETE”时,订单自动变为完成
我有4张 table
1 个订单
ID_ORDER:OR00001
状态:处理中/更改自动“完成”
创建日期:17/07/2017
3 道菜
1 道菜 意大利面
编号:PA00001
名称:意大利面米德拉
厨师:杰夫
ID_ORDER:OR00001
状态:进行中
2道菜色拉
编号:SA00001
名称:无糖沙拉
厨师:阿斯顿
ID_ORDER:OR00001
状态:进行中
3 道菜肉
编号:ME00001
名称:肉 BBF
厨师:杰夫
ID_ORDER:OR00001
状态:进行中
这怎么可能?谢谢
CREATE TABLE [dbo].[ORDER](
[ID_OR] [int] IDENTITY(1,1) NOT NULL,
[ID_ORDER] AS ('OR'+right('00000'+CONVERT([varchar],[ID_OR],(0)),(5))),
[STATUS] [datetime] NOT NULL,
[CREATION_DATE] [datetime] NOT NULL,
CONSTRAINT [PK_RR] PRIMARY KEY CLUSTERED
(
[ID_ORDER] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
CREATE TABLE [dbo].[1_DISH](
[ID_D1] [int] IDENTITY(1,1) NOT NULL,
[ID_PASTA] AS ('PA'+right('00000'+CONVERT([varchar],[ID_D1],(0)),(5))),
[NAME] [varchar](20),
[CHEF] [varchar](20),
[STATUS] [datetime] NOT NULL,
[ID_ORDER] [varchar](20)
CONSTRAINT [PK_RR] PRIMARY KEY CLUSTERED
(
[ID_PASTA] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
CREATE TABLE [dbo].[2_DISH](
[ID_D2] [int] IDENTITY(1,1) NOT NULL,
[ID_SALAD] AS ('SA'+right('00000'+CONVERT([varchar],[ID_D2],(0)),(5))),
[NAME] [varchar](20),
[CHEF] [varchar](20),
[STATUS] [datetime] NOT NULL,
[ID_ORDER] [varchar](20)
CONSTRAINT [PK_RR] PRIMARY KEY CLUSTERED
(
[ID_SALAD] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
CREATE TABLE [dbo].[3_DISH](
[ID_D3] [int] IDENTITY(1,1) NOT NULL,
[ID_MEAT] AS ('ME'+right('00000'+CONVERT([varchar],[ID_D3],(0)),(5))),
[NAME] [varchar](20),
[CHEF] [varchar](20),
[STATUS] [datetime] NOT NULL,
[ID_ORDER] [varchar](20)
CONSTRAINT [PK_RR] PRIMARY KEY CLUSTERED
(
[ID_MEAT] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
最佳答案
下面是一些可能对您有所帮助的示例代码。
创建了两个表:一个用于Orders,第二个用于构成订单的Dishes。
我在 Dish 表中添加了一个 DishType 列。
我将 Status 更改为 varchar
数据类型。
declare @ORDERTABLE table
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[STATUS] [varchar](20) NOT NULL,
[CREATION_DATE] [datetime] NOT NULL
)
declare @DISHTABLE table
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[DISHTYPE] varchar(20),
[NAME] [varchar](20),
[CHEF] [varchar](20),
[STATUS] [varchar](20) NOT NULL,
[ID_ORDER] int
)
插入了一些示例数据。
insert @ORDERTABLE (STATUS, CREATION_DATE) values
('IN PROCESS', getdate()),
('IN PROCESS', getdate());
insert @DISHTABLE (DISHTYPE, NAME, CHEF, STATUS, ID_ORDER) values
('PASTA','PASTA MIDELA','JEFF','IN PROCESS',1),
('SALAD','DIET SALAD','KIA','IN PROCESS',1),
('MEAT','MEAT BBF','BART','IN PROCESS',1),
('SALAD','CAESAR SALAD','KIA','IN PROCESS',2),
('MEAT','ROAST CHICKEN','BART','IN PROCESS',2);
update @DISHTABLE set STATUS = 'COMPLETE' where ID = 1;
update @DISHTABLE set STATUS = 'COMPLETE' where ID = 2;
update @DISHTABLE set STATUS = 'COMPLETE' where ID = 3;
select * from @DISHTABLE;
一种自动更改订单状态的简单方法:每当您更改菜品状态时,检查订单中有多少道菜以及完成了多少道菜。如果所有菜肴都已完成,则将订单状态也更改为完成。
declare @ORDERID int = 1;
update @ORDERTABLE
set STATUS = 'COMPLETE'
where
ID = @ORDERID
and (select count(*) from @DISHTABLE where ID_ORDER = @ORDERID) = (select count(*) from @DISHTABLE where ID_ORDER = @ORDERID and STATUS = 'COMPLETE');
select
o.ID,
DISHES = (select count(*) from @DISHTABLE where ID_ORDER = o.ID),
COMPLETED = (select count(*) from @DISHTABLE where ID_ORDER = o.ID and STATUS = 'COMPLETE'),
o.STATUS
from @ORDERTABLE o;
关于sql - 在sql中可以做到这一点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45071023/