在SqlServer中如何在水平方向进行表设计 [英] In SqlServer How to arrage table design in Horizontal

查看:93
本文介绍了在SqlServer中如何在水平方向进行表设计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的朋友,

在这里,我的数据库sqlserver中有一个问题,我的表设计是这样的

表格:

txtAge总计
低于6 3
6 7
7 11
8 18
9 19


现在我想这样显示我的桌子

txage:Below6 6 7 8 9
总数:3 7 11 18 19

如何更改为水平

示例iam给出我的查询:



SELECT ntblAge.txtAge,tblPrimaryStandard1RegistrationByAge.intMale + tblPrimaryStandard1RegistrationByAge.intFemale AS Total
FROM tblPrimaryStandard1RegistrationByAge INNER JOIN
ntblAge ON tblPrimaryStandard1RegistrationByAge.intAgeId = ntblAge.intAgeId内部联接
tblSchool ON tblPrimaryStandard1RegistrationByAge.intSchoolID = tblSchool.intSchoolID
在哪里(tblPrimaryStandard1RegistrationByAge.intSchoolID = 58)


请解决这个问题.


问候,

Anilkumar.D

Dear Friends,

Here i have a Problem in my database sqlserver my table design is like this

Table:

txtAge Total
Below6 3
6 7
7 11
8 18
9 19


Now i want to Display my table like this

txage:Below6 6 7 8 9
Total: 3 7 11 18 19

How can change to horizontal

Sample iam giving my query:



SELECT ntblAge.txtAge, tblPrimaryStandard1RegistrationByAge.intMale + tblPrimaryStandard1RegistrationByAge.intFemale AS Total
FROM tblPrimaryStandard1RegistrationByAge INNER JOIN
ntblAge ON tblPrimaryStandard1RegistrationByAge.intAgeId = ntblAge.intAgeId INNER JOIN
tblSchool ON tblPrimaryStandard1RegistrationByAge.intSchoolID = tblSchool.intSchoolID
WHERE (tblPrimaryStandard1RegistrationByAge.intSchoolID = 58)


Please solve this .


Regards,

Anilkumar.D

推荐答案

对此查询不可能,因此必须编写自己的存储过程.

例子
创建名称为tlbTextData的表
It is not possible with the query for this u have to write your own store procedure.

Example
Create Table of name tlbTextData
create table tlbTextData (fldTextKey varchar(10), fldTextVal varchar(10))
insert into tlbTextData values('One','1')
insert into tlbTextData values('Two','2')
insert into tlbTextData values('Three','3')
insert into tlbTextData values('Four','4')
insert into tlbTextData values('Five','5')



受约束的程序



Strored Procedure

DECLARE @ColNameAS VARCHAR(10),
		@RowElement AS VARCHAR(10),
		@SqlQuery AS NVARCHAR(300),
		@iColumnName AS INT,
		@iFirstTime AS INT,
		@AddColName AS NVARCHAR(10)

SELECT @iFirstTime=0

CREATE TABLE #tlbMemTable (fldColName VARCHAR(10))
   
DECLARE GetColumnName CURSOR FOR      
           SELECT column_name FROM Information_Schema.Columns WHERE table_name='tlbTextData'
OPEN GetColumnName      
FETCH NEXT FROM GetColumnName INTO @ColName     
WHILE(@@FETCH_STATUS = 0)    
BEGIN--1 
	INSERT INTO #tlbMemTable(fldColName) VALUES(@ColName)
	SET @iColumnName = 0 
	SELECT @SqlQuery = 'DECLARE GetRow CURSOR FOR SELECT '+ @ColName +' FROM tlbTextData' 
	EXEC sp_executesql @SqlQuery   
	OPEN GetRow
	FETCH NEXT FROM GetRow INTO @RowElement 
	WHILE(@@FETCH_STATUS = 0)    
	BEGIN--2 
		
		SELECT @AddColName = 'VAL'+CAST(@iColumnName AS VARCHAR(10))
		print @AddColName
		IF(@iFirstTime=0)
		BEGIN
			SELECT @SqlQuery = 'ALTER TABLE #tlbMemTable ADD '+@AddColName+' NVARCHAR(10)'
			EXEC(@SqlQuery)
		END
		
		SELECT @SqlQuery = 'UPDATE #tlbMemTable SET '+@AddColName+'='''+@RowElement+''''+' WHERE fldColName='''+@ColName +''''
		EXEC(@SqlQuery)		
		SET @iColumnName = @iColumnName + 1
		FETCH NEXT FROM GetRow INTO @RowElement 
	END--2
	CLOSE GetRow      
	DEALLOCATE GetRow
	SET @iFirstTime = 1
	FETCH NEXT FROM GetColumnName INTO @ColName   
END--1      
CLOSE GetColumnName      
DEALLOCATE GetColumnName   

SELECT * FROM #tlbMemTable
DROP TABLE #tlbMemTable



注意:如果您要使用它,请优化上述sp:)



Note : Please optimize above sp if ur going to use it :)


这篇关于在SqlServer中如何在水平方向进行表设计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆