Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# non normalized table

Posted on 2014-01-26
Medium Priority
353 Views
I have a non normalized table - I think that's the correct description.  I have a column that is a code that indicates the type of data that is contained in a second column, so let's say "code" and "value" are the column names.    I need the average of all value for each code returned in a single record.  I only need this for, say 3 specific codes, 11, 22, 33.  How can I do this?
0
Question by:HLRosenberger
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 13

Expert Comment

ID: 39810300
select code, avg(value) from table where code in (11,22,33) group by code
0

LVL 13

Expert Comment

ID: 39810308
PS - A 'denormalized' table is one where two or more normalized tables are combined.  For example, if 'code' in your example also has 'code long description' in this same table then that would be denormalized.  If code long description were in a lookup table, that would be normalized,
0

LVL 49

Expert Comment

ID: 39810818
>>" returned in a single record. "

Why must it be returned as a single record?

(the solution provided above will produce 3 rows)
0

LVL 70

Accepted Solution

Scott Pletcher earned 2000 total points
ID: 39812202
SELECT
AVG(CASE WHEN code = '11' THEN value END) AS code_11_avg,
AVG(CASE WHEN code = '22' THEN value END) AS code_22_avg,
AVG(CASE WHEN code = '33' THEN value END) AS code_33_avg
FROM dbo.tablename
WHERE
code IN ( '11', '22', '33' )
0

LVL 13

Expert Comment

ID: 39812491
It's not clear either way that it's supposed to be a single record result set. That sentence doesn't parse well. The second query will do if that's the case.
0

LVL 32

Expert Comment

ID: 39812740
Perhaps some sample data and your expected output would help clarify. I think one of the two solutions provided will accomplish what you want. Assume the average value of code 11 is 5, and the average value of code 22 is 10, and the average value of code 33 is 15, the first produces
code value
11     5
22    10
33    15
and the second produces
11avgval  22avgval  33avgval
5              10             15
0

LVL 1

Author Closing Comment

ID: 39823205
thanks.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I have a large data set and a SSIS package. How can I load this file in multi threading?
Windocks is an independent port of Docker's open source to Windows.   This article introduces the use of SQL Server in containers, with integrated support of SQL Server database cloning.
Via a live example, show how to setup several different housekeeping processes for a SQL Server.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…
###### Suggested Courses
Course of the Month6 days, 5 hours left to enroll