由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 问一个SQL Server的问题
相关主题
MS T-SQL 问题SQL help.
求教个MS SQL的问题誰來幫我開來開悄? Interesting SQL query
About INSERT IGNORE这个query怎么写?
error of executing SQL query of string concatenation (转载sql的2个问题 (转载)
SQL find distinct values in large table请教2个sql query 问题
[转载] Can anyone interpret this simple SQL?请教一个有关SQL concat的问题
How to replace 0 with empty?求助:如何ColumName 作为变量放入query
better solution for cross table query in sql?请教一个SQL的问题
相关话题的讨论汇总
话题: cn话题: cm话题: cl话题: ca话题: cb
进入Database版参与讨论
1 (共1页)
j****s
发帖数: 881
1
有一个表 (第一行为column name):
CM CN CA CB CC CD
M1 N1 A C
M2 N2
M3 N3 B D
M4 N4 A
...
要变成这种形式:
CM CN CL
M1 N1 A
M1 N1 C
M3 N3 B
M3 N3 D
M4 N4 A
...
就是说把CA CB CC CD这些列里有值的都放到CL列,如果CA CB CC CD都为空,那一行就
不要了,如果同一行里CA CB CC CD有n不为空的值,就重复该行n次。
有什么简便方法吗?
多谢各位大佬!
B*****g
发帖数: 34098
2
SELECT CM, CN, CA AS CL
FROM 表
WHERE CA IS NOT NULL
UNION ALL
SELECT CM, CN, CB AS CL
FROM 表
WHERE CB IS NOT NULL
....
If there duplicate and you want to remove, use UNION instead of UNION ALL

【在 j****s 的大作中提到】
: 有一个表 (第一行为column name):
: CM CN CA CB CC CD
: M1 N1 A C
: M2 N2
: M3 N3 B D
: M4 N4 A
: ...
: 要变成这种形式:
: CM CN CL
: M1 N1 A

i*****w
发帖数: 75
3
This is a Pivot/UnPivot problem:
Declare @tbl Table (CM Varchar(10), CN Varchar(10), CA Varchar(10), CB
Varchar(10), CC Varchar(10) , CD Varchar(10))
INSERT INTO @tbl(CM, CN, CA, CC)
VALUES('M1','N1','A','C')
INSERT INTO @tbl(CM, CN)
VALUES('M2', 'N2')
INSERT INTO @tbl(cm, cn, cb, cd)
VALUES('M3', 'N3', 'B', 'D')
INSERT INTO @tbl(cm, cn, ca)
VALUES('M4','N4','A')
Select * FROM @tbl
SELECT CM, CN, Value as CL
FROM
(
Select CM, CN, CA, CB, CC, CD FROM @tbl
)p
UNPIVOT
(Value FOR CL IN (CA, CB, CC, CD))
as UnPvt
g***l
发帖数: 18555
4
PIVOT可以解决,老的办法是这样 TABLE
CM CN C
INSERT INTO TABLE SELECT CM CN CA WHERE CA IS NOT NULL
INSERT INTO TABLE SELECT CM CN CB WHERE CB IS NOT NULL
INSERT INTO TABLE SELECT CM CN CC WHERE CC IS NOT NULL
INSERT INTO TABLE SELECT CM CN CD WHERE CD IS NOT NULL
j****s
发帖数: 881
5
多谢多谢,gejkl 和beijing的解法看着比较简单。
我能想到的是用cursor一行行读,但是比较麻烦。
以上各位各领一个包子以表感谢。
j****s
发帖数: 881
6
表1
CM CN CL
M1 N1 A
M1 N1 C
M3 N3 B
M3 N3 D
M4 N4 A
。。。
变表2
CM CN CA CB CC CD
M1 N1 A C
M3 N3 B D
M4 N4 A
。。。
是不是就只能用cursor了?还有什么简便方法吗?
i*****w
发帖数: 75
7
Still the Pivot function.
Declare @tbl Table (CM Varchar(10), CN Varchar(10), CL Varchar(10))
INSERT INTO @tbl(CM, CN, CL)
VALUES('M1','N1','A')
INSERT INTO @tbl(CM, CN, CL)
VALUES('M1','N1','C')
INSERT INTO @tbl(CM, CN, CL)
VALUES('M3', 'N3', 'B')
INSERT INTO @tbl(CM, CN, CL)
VALUES('M3', 'N3', 'D')
INSERT INTO @tbl(CM, CN, CL)
VALUES('M4','N4','A')
Select * FROM @tbl
SELECT CM, CN, A as CA, B as CB, C as CC, D as CD
FROM
(
select CM, CN, CL from @tbl
)p
PIVOT
(MAX(CL) for CL IN (A,B,C,D))
as Pvt

【在 j****s 的大作中提到】
: 表1
: CM CN CL
: M1 N1 A
: M1 N1 C
: M3 N3 B
: M3 N3 D
: M4 N4 A
: 。。。
: 变表2
: CM CN CA CB CC CD

j****s
发帖数: 881
8
这个pivot function我用的不多,看来要熟悉一下,很有用。
双黄包一个。
1 (共1页)
进入Database版参与讨论
相关主题
请教一个SQL的问题SQL find distinct values in large table
SQL add some columns into a table from another table (转载[转载] Can anyone interpret this simple SQL?
correlated subqueryHow to replace 0 with empty?
PIVOT TABLEbetter solution for cross table query in sql?
MS T-SQL 问题SQL help.
求教个MS SQL的问题誰來幫我開來開悄? Interesting SQL query
About INSERT IGNORE这个query怎么写?
error of executing SQL query of string concatenation (转载sql的2个问题 (转载)
相关话题的讨论汇总
话题: cn话题: cm话题: cl话题: ca话题: cb