Query: Union On Self
Jul 10, 2006Hello every body.
I have a small issue.
Problem: I have a table with 4 descriptor columns (type). I need to
formulate a query to retrieve a count for each type so I can group
by...etc. The view I have works, but doesn't work when I supplement the
query with some functions... they just don't like the UNION. The real
problem is I can't change any of the udf's or queries, just the view.
The view is inner joined back on to the primary table 'qt_ins' again
and a heap of other tables. But for this post and to not complicate it
too much I've just included the primary table and the view...
Also my querys work if I don't put a where clause on for the VIEW. eg:
.... and cv.type = 'Environmental'.... for some reason with a clause it
gets stuck in an *infinite loop.
Conditions: The table structure cannot be changed in anyway. The
view/query must return 2 columns qi_id & type.
I considered creating a function to return the Types but then I figured
I would ask you folks for a better way.
Any help with the view appreciated.
Thank you.
The below will create the table, with sample data and the view.
---------------------------Start
Query--------------------------------------------
CREATE TABLE [dbo].[qt_ins] (
[qi_id] [int] NOT NULL ,
[qi_injury] [bit] NULL ,
[qi_environmental] [bit] NULL ,
[qi_equipment_damage] [bit] NULL ,
[qi_vehicle] [bit] NULL
) ON [PRIMARY]
GO
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (20,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (21,0,1,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (23,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (24,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (25,1,1,1,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (26,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (27,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (28,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (29,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (30,1,1,1,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (31,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (32,1,1,1,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (33,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (34,1,1,1,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (35,1,0,0,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (36,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (37,0,0,0,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (38,0,0,0,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (39,0,1,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (40,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (41,0,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (42,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (43,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (44,0,1,1,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (45,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (46,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (47,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (48,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (49,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (50,1,0,1,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (51,0,0,1,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (52,0,1,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (53,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (54,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (55,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (56,1,1,1,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (57,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (58,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (59,0,1,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (60,0,1,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (61,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (62,0,1,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (63,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (64,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (65,1,0,1,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (66,1,0,0,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (67,1,1,1,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (68,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (69,1,0,0,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (70,1,1,1,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (71,1,1,1,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (72,1,1,1,1)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (73,0,0,1,0)
INSERT INTO qt_ins
(qi_id,qi_injury,qi_environmental,qi_equipment_dam age,qi_vehicle)
VALUES (81,1,0,0,0)
GO
CREATE VIEW dbo.v_qt_in_type
AS
SELECT qi_id, 'Injury' AS type FROM qt_ins WHERE qi_injury = 1
UNION all
SELECT qi_id, 'Environmental' AS type FROM qt_ins WHERE
qi_environmental = 1
UNION all
SELECT qi_id, 'Equipment damage' AS type FROM qt_ins WHERE
qi_equipment_damage = 1
UNION all
SELECT qi_id, 'Vehicle' AS type FROM qt_ins WHERE qi_vehicle = 1
GO
select count(*),type from v_qt_in_type group by type
---------------------------END
QUERY--------------------------------------