Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
hdv212
Posting Yak Master
140 Posts |
Posted - 2010-07-28 : 08:34:01
|
HiIn my app, to accomplish workflow tasks, i have a few tables to hold workflow data. here is my table definition :Customers(CustomerID PK, CustomerName) -- for example Alex, Maria, ...Workflows(WorkflowID PK, WorkflowName) -- for example Vacation RequestWorkflowSteps(WorkflowStepID PK, WorkflowID FK, WorkflowStepName) -- for example Step1, Step2, ...WorkflowStatus(WorkflowStatusID PK, WorkflowStatusName) -- for exmaple Not Started, Progressing, Completed, CanceledWorkflowHistory(WorkflowHistoryID PK, CustomerID FK, WorkflowStepID FK, WorkflowStatusID FK)My question is that how to get select from my data, something like this :CustomerID, WorkflowID, WorkflowStepID, WorkflowStatusIDnotice that, a new customer maybe not have any workflow history record. but all workflowsteps must be listed for any customers (it must be left join with customer)can anybody help me ?thanks in advance |
|
vijayisonly
Master Smack Fu Yak Hacker
1836 Posts |
Posted - 2010-07-28 : 10:17:03
|
Please provide some sample data and expected output too.Customers and Workflow is only related via the WorkflowHistory? |
 |
|
hdv212
Posting Yak Master
140 Posts |
Posted - 2010-07-28 : 11:34:42
|
Hiyes, they are related only in history.here is sample database structure with sample data :CREATE DATABASE [Test]GOUSE [Test]GO/****** Object: Table [dbo].[WorkflowStatus] Script Date: 07/28/2010 20:02:13 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[WorkflowStatus]( [WorkflowStatusID] [int] NOT NULL, [WorkflowStatusName] [nvarchar](50) NULL, CONSTRAINT [PK_WorkflowStatus] PRIMARY KEY CLUSTERED ( [WorkflowStatusID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GOINSERT [dbo].[WorkflowStatus] ([WorkflowStatusID], [WorkflowStatusName]) VALUES (1, N'Not Started')INSERT [dbo].[WorkflowStatus] ([WorkflowStatusID], [WorkflowStatusName]) VALUES (2, N'In Progress')INSERT [dbo].[WorkflowStatus] ([WorkflowStatusID], [WorkflowStatusName]) VALUES (3, N'Completed')INSERT [dbo].[WorkflowStatus] ([WorkflowStatusID], [WorkflowStatusName]) VALUES (4, N'Canceled')/****** Object: Table [dbo].[Workflows] Script Date: 07/28/2010 20:02:13 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Workflows]( [WorkflowID] [int] NOT NULL, [WorkflowName] [nvarchar](50) NULL, CONSTRAINT [PK_Workflows] PRIMARY KEY CLUSTERED ( [WorkflowID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GOINSERT [dbo].[Workflows] ([WorkflowID], [WorkflowName]) VALUES (1, N'Vacation Request')INSERT [dbo].[Workflows] ([WorkflowID], [WorkflowName]) VALUES (2, N'Request Workflow 2')/****** Object: Table [dbo].[Customers] Script Date: 07/28/2010 20:02:13 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Customers]( [CustomerID] [int] NOT NULL, [CustomerName] [nvarchar](50) NULL, CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED ( [CustomerID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GOINSERT [dbo].[Customers] ([CustomerID], [CustomerName]) VALUES (1, N'Alex')INSERT [dbo].[Customers] ([CustomerID], [CustomerName]) VALUES (2, N'Albert')INSERT [dbo].[Customers] ([CustomerID], [CustomerName]) VALUES (3, N'Scot')/****** Object: Table [dbo].[WorkflowSteps] Script Date: 07/28/2010 20:02:13 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[WorkflowSteps]( [WorkflowStepID] [int] NOT NULL, [WorkflowID] [int] NULL, [WorkflowStepName] [nvarchar](50) NULL, CONSTRAINT [PK_WorkflowSteps] PRIMARY KEY CLUSTERED ( [WorkflowStepID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GOINSERT [dbo].[WorkflowSteps] ([WorkflowStepID], [WorkflowID], [WorkflowStepName]) VALUES (1, 1, N'Submit Documents')INSERT [dbo].[WorkflowSteps] ([WorkflowStepID], [WorkflowID], [WorkflowStepName]) VALUES (2, 1, N'Inquiry from Communication')INSERT [dbo].[WorkflowSteps] ([WorkflowStepID], [WorkflowID], [WorkflowStepName]) VALUES (3, 1, N'Send To Customer')INSERT [dbo].[WorkflowSteps] ([WorkflowStepID], [WorkflowID], [WorkflowStepName]) VALUES (4, 2, N'Sales Manager Passed')INSERT [dbo].[WorkflowSteps] ([WorkflowStepID], [WorkflowID], [WorkflowStepName]) VALUES (5, 2, N'CEO Passed')/****** Object: Table [dbo].[WorkflowHistory] Script Date: 07/28/2010 20:02:13 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[WorkflowHistory]( [WorkflowHistoryID] [int] IDENTITY(1,1) NOT NULL, [CustomerID] [int] NULL, [WorkflowStepID] [int] NULL, [WorkflowStatusID] [int] NULL, CONSTRAINT [PK_WorkflowHistory] PRIMARY KEY CLUSTERED ( [WorkflowHistoryID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GO/****** Object: ForeignKey [FK_WorkflowHistory_Customers] Script Date: 07/28/2010 20:02:13 ******/ALTER TABLE [dbo].[WorkflowHistory] WITH CHECK ADD CONSTRAINT [FK_WorkflowHistory_Customers] FOREIGN KEY([CustomerID])REFERENCES [dbo].[Customers] ([CustomerID])GOALTER TABLE [dbo].[WorkflowHistory] CHECK CONSTRAINT [FK_WorkflowHistory_Customers]GO/****** Object: ForeignKey [FK_WorkflowHistory_WorkflowStatus] Script Date: 07/28/2010 20:02:13 ******/ALTER TABLE [dbo].[WorkflowHistory] WITH CHECK ADD CONSTRAINT [FK_WorkflowHistory_WorkflowStatus] FOREIGN KEY([WorkflowStatusID])REFERENCES [dbo].[WorkflowStatus] ([WorkflowStatusID])GOALTER TABLE [dbo].[WorkflowHistory] CHECK CONSTRAINT [FK_WorkflowHistory_WorkflowStatus]GO/****** Object: ForeignKey [FK_WorkflowHistory_WorkflowSteps] Script Date: 07/28/2010 20:02:13 ******/ALTER TABLE [dbo].[WorkflowHistory] WITH CHECK ADD CONSTRAINT [FK_WorkflowHistory_WorkflowSteps] FOREIGN KEY([WorkflowStepID])REFERENCES [dbo].[WorkflowSteps] ([WorkflowStepID])GOALTER TABLE [dbo].[WorkflowHistory] CHECK CONSTRAINT [FK_WorkflowHistory_WorkflowSteps]GO/****** Object: ForeignKey [FK_WorkflowSteps_Workflows] Script Date: 07/28/2010 20:02:13 ******/ALTER TABLE [dbo].[WorkflowSteps] WITH CHECK ADD CONSTRAINT [FK_WorkflowSteps_Workflows] FOREIGN KEY([WorkflowID])REFERENCES [dbo].[Workflows] ([WorkflowID])GOALTER TABLE [dbo].[WorkflowSteps] CHECK CONSTRAINT [FK_WorkflowSteps_Workflows]GO |
 |
|
hdv212
Posting Yak Master
140 Posts |
Posted - 2010-07-28 : 18:40:45
|
Any help ? |
 |
|
vijayisonly
Master Smack Fu Yak Hacker
1836 Posts |
Posted - 2010-07-29 : 09:09:42
|
You still haven't provided complete sample data and expected output.Refer to this link on how to provide the samehttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxHere's a shot in the dark....however.SELECT a.CustomerID, d.WorkflowID, b.WorkflowStepID, b.WorkflowStatusIDfrom Customers aLEFT JOIN WorkflowHistory b on a.CustomerID = b.CustomerIDLEFT JOIN WorkflowSteps c on c.WorkflowStepID = b.WorkflowStepIDLEFT JOIN Workflows d on d.WorkflowID = c.WorkflowID |
 |
|
hdv212
Posting Yak Master
140 Posts |
Posted - 2010-07-29 : 18:27:50
|
Thanks vijayisonlyYour query is very useful, but it's result is something like this :CustomerID WorkflowID WorkflowStepID WorkflowStatusID1 NULL NULL NULL2 NULL NULL NULL3 NULL NULL NULLand i want result something like this :CustomerID WorkflowID WorkflowStepID WorkflowStatusID1 1 1 Unknown1 1 2 Unknown1 1 3 Unknownthanks in advance |
 |
|
ms65g
Constraint Violating Yak Guru
497 Posts |
Posted - 2010-07-29 : 19:55:05
|
Your sample schema not matches with information on first post. At the workflowhistory you missed to add the workflowid column. No matter.I think understand your scenario and expected result.You need to insert the cross join of the customers and workflowsteps table in workflowhistory. If I am correct then you need to create an after insert trigger for inserting to workflowhistory. The trigger can be written by this:create trigger trg_after_insert on customersafter insert asinsert workflowhistory (customerid, workflowid, workflowstepid, workflowstatusid)select customerid, workflowid, workflowstepid, null as workflowstatusidfrom Customers, WorkflowSteps wexcept select customerid, workflowid, workflowstepid, null as workflowstatusidfrom workflowhistory;go--orcreate trigger trg_after_insert on customersafter insert asinsert workflowhistory (customerid, workflowid, workflowstepid, workflowstatusid)select customerid, workflowid, workflowstepid, null as workflowstatusidfrom Customers, WorkflowSteps wwhere customerid in (select customerid from inserted); ______________________ |
 |
|
hdv212
Posting Yak Master
140 Posts |
Posted - 2010-07-30 : 03:19:18
|
Hi ms65gThanks, but i don't want to use trigger. in workflowHistory i have WorkflowStepID which refer to WorkflowSteps table and it have WorkflowID. |
 |
|
|
|
|
|
|