• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 515
  • Last Modified:

sql server 2008 query

Hi experts,

I'm using Sql Server 2008 with SSMS.

I have a table that looks like this:

my table
This is the script to create this table:

CREATE TABLE [dbo].[MyTestTable1](
	[DepartmentID] [int] NULL,
	[DepartmentName] [varchar](50) NULL
INSERT [dbo].[MyTestTable1] ([DepartmentID], [DepartmentName]) VALUES (1, N'Accounting')
INSERT [dbo].[MyTestTable1] ([DepartmentID], [DepartmentName]) VALUES (2, N'Human Resources')
INSERT [dbo].[MyTestTable1] ([DepartmentID], [DepartmentName]) VALUES (3, N'Finance')
INSERT [dbo].[MyTestTable1] ([DepartmentID], [DepartmentName]) VALUES (4, N'Marketing')

Open in new window

Now I want to write a query that creates a column to my table. The column I'm adding is called Test Column.  This column concatenates DepartmentID a dash and then DepartmentName.
I'm also creating a DepartmentID value of 0 and adding it to the DepartmentID column and this value should contain the word All as the value in the TestColum.

So my desired result should look like this drawing which I drew in Excel.

my desired result set
The red items in the drawing are what I  want to add.

Query 1

So I have this query:

SELECT 0 AS DepartmentID
SELECT m.DepartmentID
FROM [TestDatabase].[dbo].[MyTestTable1] m

When I run it I get this:

query 1
Query 2

So now I just want to add the Concatenated column called TestColumn to Query 1.
So i have this query:

SELECT 0 AS DepartmentID
SELECT m.DepartmentID
      ,Cast(m.DepartmentID As varchar) + ' - ' + m.DepartmentName As TestColumn
FROM [TestDatabase].[dbo].[MyTestTable1] m

But this query gives me this error:

All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.

Anyone know how I can fix Query 2 so it gives my desired result set as shown in the image above?
2 Solutions
Simone BSenior E-Commerce AnalystCommented:
SELECT 0 AS DepartmentID, 'All' as TestColumn
SELECT m.DepartmentID
      ,Cast(m.DepartmentID As varchar) + ' - ' + m.DepartmentName
FROM [TestDatabase].[dbo].[MyTestTable1] m

your first select has only 1 column, and your second select has 2. They both have to have the same number of columns, so just add the 'All' in the first select

(edited, sorry)
That is because the second column for your first record is null. Try something like this:
SELECT 0 AS DepartmentID, NULL
SELECT m.DepartmentID
      ,Cast(m.DepartmentID As varchar) + ' - ' + m.DepartmentName As TestColumn
FROM [TestDatabase].[dbo].[MyTestTable1] m
Scott PletcherSenior DBACommented:
If you're going to need this in multiple places, I'd add the test column definition to the main table as a computed, non-persisted column.

Also, note that "UNION ALL" makes more sense in this case than "UNION", and that you an ORDER BY is required to guarantee that Dept "0" comes out first.

USE [TestDatabase]
ALTER TABLE [dbo].[MyTestTable1] ADD TestColumn AS CAST(DepartmentID AS varchar(10)) + ' - ' + DepartmentName

SELECT 0 AS DepartmentID, 'All' AS TestColumn
SELECT m.DepartmentID, m.TestColumn
FROM [TestDatabase].[dbo].[MyTestTable1] m
ORDER BY DepartmentID
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

A proven path to a career in data science

At Springboard, we know how to get you a job in data science. With Springboard’s Data Science Career Track, you’ll master data science  with a curriculum built by industry experts. You’ll work on real projects, and get 1-on-1 mentorship from a data scientist.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now