[英]How to split a single row into multiple rows using SQL
My T-SQL code selects information concerning college debt amounts from a table. 我的T-SQL代码从表格中选择有关大学债务金额的信息。 The code itself works, but I need to break the single row up.
代码本身可以工作,但是我需要将单行拆分。 There are 4 rows, one for each debt level.
有4行,每个债务级别一个。 I'm probably missing something simple at this point.
我现在可能缺少一些简单的东西。
USE [College Database]
GO
DECLARE @P10W FLOAT, @P25W FLOAT, @P75W FLOAT, @P90W FLOAT, @P10A FLOAT, @P25A FLOAT, @P75A FLOAT, @P90A FLOAT
SELECT @P10W = CONVERT(DECIMAL(6,0),SUM(CUML_DEBT_P10*CUML_DEBT_N)/SUM(CUML_DEBT_N)),
@P25W = CONVERT(DECIMAL(6,0),SUM(CUML_DEBT_P25*CUML_DEBT_N)/SUM(CUML_DEBT_N)),
@P75W = CONVERT(DECIMAL(6,0),SUM(CUML_DEBT_P75*CUML_DEBT_N)/SUM(CUML_DEBT_N)),
@P90W = CONVERT(DECIMAL(6,0),SUM(CUML_DEBT_P90*CUML_DEBT_N)/SUM(CUML_DEBT_N))
FROM CollegeInfo
SELECT
@P10A = CONVERT(DECIMAL(6,0),AVG(CUML_DEBT_P10)),
@P25A = CONVERT(DECIMAL(6,0),AVG(CUML_DEBT_P25)),
@P75A = CONVERT(DECIMAL(6,0),AVG(CUML_DEBT_P75)),
@P90A = CONVERT(DECIMAL(6,0),AVG(CUML_DEBT_P90))
From CollegeInfo
SELECT '10% Debt Level',
CUML_DEBT_P10 AS 'Institution',
@P10A AS 'Average',
@P10W AS ' Weighted Average' ,
'25% Debt Level',
CUML_DEBT_P25 AS 'Institution',
@P25A AS 'Average',
@P25W AS ' Weighted Average' ,
'75% Debt Level',
CUML_DEBT_P75 AS 'Institution',
@P75A AS 'Average',
@P75W AS ' Weighted Average' ,
'90% Debt Level',
CUML_DEBT_P90 AS 'Institution',
@P90A AS 'Average',
@P90W AS ' Weighted Average'
FROM CollegeInfo
WHERE INSTNM LIKE'%Alabama A & M%'
Right now it reads as 现在它读为
10% Debt Level 4750 3530 2816 25% Debt Level 9500 6243 5990 75% Debt Level 37900 18543 27976 90% Debt Level 50114 25147 39153
But it needs to read as 但是它需要读为
10% Debt Level 4750 3530 2816
25% Debt Level 9500 6243 5990
75% Debt Level 37900 18543 27976
90% Debt Level 50114 25147 39153
Like this: 像这样:
SELECT '10% Debt Level'
, CUML_DEBT_P10 AS 'Institution'
, @P10A AS 'Average'
, @P10W AS ' Weighted Average'
FROM CollegeInfo
WHERE INSTNM LIKE'%Alabama A & M%'
UNION ALL
SELECT'25% Debt Level',
, CUML_DEBT_P25 AS 'Institution'
, @P25A AS 'Average'
, @P25W AS ' Weighted Average'
FROM CollegeInfo
WHERE INSTNM LIKE'%Alabama A & M%'
UNION ALL
SELECT '75% Debt Level'
, CUML_DEBT_P75 AS 'Institution'
, @P75A AS 'Average'
, @P75W AS ' Weighted Average'
FROM CollegeInfo
WHERE INSTNM LIKE'%Alabama A & M%'
UNION ALL
SELECT '90% Debt Level'
, CUML_DEBT_P90 AS 'Institution'
, @P90A AS 'Average'
, @P90W AS ' Weighted Average'
FROM CollegeInfo
WHERE INSTNM LIKE'%Alabama A & M%'
I suppose you could do this as well: 我想您也可以这样做:
WITH CTE AS (
SELECT '10% Debt Level' debtLevel,
CUML_DEBT_P10 AS 'InstitutionA',
@P10A AS 'AverageA',
@P10W AS [Weighted AverageA] ,
'25% Debt Level',
CUML_DEBT_P25 AS 'InstitutionB',
@P25A AS 'AverageB',
@P25W AS [Weighted AverageB] ,
'75% Debt Level',
CUML_DEBT_P75 AS 'InstitutionC',
@P75A AS 'AverageC',
@P75W AS [Weighted AverageC] ,
'90% Debt Level',
CUML_DEBT_P90 AS 'InstitutionD',
@P90A AS 'AverageD',
@P90W AS [Weighted AverageD]
FROM CollegeInfo
WHERE INSTNM LIKE'%Alabama A & M%')
SELECT B.DL
, max(CASE WHEN B.DL='10% Debt Level' THEN CTE.InstitutionA
WHEN B.DL='25% Debt Level' THEN CTE.InstitutionB
WHEN B.DL='75% Debt Level' THEN CTE.InstitutionC
WHEN B.DL='90% Debt Level' THEN CTE.InstitutionD END) as Institution
, max(CASE WHEN B.DL='10% Debt Level' THEN CTE.AverageA
WHEN B.DL='25% Debt Level' THEN CTE.AverageB
WHEN B.DL='75% Debt Level' THEN CTE.AverageC
WHEN B.DL='90% Debt Level' THEN CTE.AverageD END) as Average
, max(CASE WHEN B.DL='10% Debt Level' THEN CTE.[Weighted AverageA]
WHEN B.DL='25% Debt Level' THEN CTE.[Weighted AverageB]
WHEN B.DL='75% Debt Level' THEN CTE.[Weighted AverageC]
WHEN B.DL='90% Debt Level' THEN CTE.[Weighted AverageD] END) as WeightedAverage
FROM CTE
CROSS JOIN (SELECT '10% Debt Level' DL UNION ALL
SELECT '25% Debt Level' UNION ALL
SELECT '75% Debt Level' UNION ALL
SELECT '90% Debt Level') B
GROUP BY B.DL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.