一列多行值合并成一个值(MS SQL SERVER 2008)
2011-07-02 08:45
405 查看
现在有两张表,一张手机型号表(PhoneModel),一张手机制造商表(PhoneCompany)
PhoneModel表结构如下:
PhoneCompany表结构如下:
,PhoneModel表通过字段coid与PhoneCompany表的coid相关联.现在的需求是如下图":
新增一列查询models,这列显示一个手机制造商所生产的所有手机型号。因为一个手机制造商会生产很多型号的手机,就需要把多条手机型号的记录合并成一个值.
使用for xml path可以实现类似的需求。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
于是写出了上述SQL句,查询结果如下:
,
最后一个型号总是有逗号(如下图)
于是改进之,把最后一个逗号去掉
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
查询结果如下
于是把最后一个逗号都去掉了.
但是一个诡异的问题出现了,通过asp程序读取models这列的值会读取不到值,查询分析器里运行是有值的,急中生智再做一次变换
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
问题是解决了,可是具体原因还是不太明白,为什么asp程序会读取不到值?
PhoneModel表结构如下:
PhoneCompany表结构如下:
,PhoneModel表通过字段coid与PhoneCompany表的coid相关联.现在的需求是如下图":
新增一列查询models,这列显示一个手机制造商所生产的所有手机型号。因为一个手机制造商会生产很多型号的手机,就需要把多条手机型号的记录合并成一个值.
使用for xml path可以实现类似的需求。
SELECT coid,company,(SELECT model+',' FROM dbo.PhoneModel WHERE coid=pc.coid FOR XML PATH('')) AS models FROM dbo.PhoneCompany AS pc
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
于是写出了上述SQL句,查询结果如下:
,
最后一个型号总是有逗号(如下图)
于是改进之,把最后一个逗号去掉
SELECT coid,company,LEFT(models,LEN(models)-1) AS models FROM
(
SELECT coid,company,(SELECT model+',' FROM dbo.PhoneModel WHERE coid=pc.coid FOR XML PATH('')) AS models FROM dbo.PhoneCompany AS pc
)
AS p
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
查询结果如下
于是把最后一个逗号都去掉了.
但是一个诡异的问题出现了,通过asp程序读取models这列的值会读取不到值,查询分析器里运行是有值的,急中生智再做一次变换
SELECT coid,company,LEFT(models,LEN(models)-1) AS models FROM
(
SELECT coid,company,convert(VARCHAR(5000),(SELECT model+',' FROM dbo.PhoneModel WHERE coid=pc.coid FOR XML PATH(''))) AS models FROM dbo.PhoneCompany AS pc
)
AS p
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
问题是解决了,可是具体原因还是不太明白,为什么asp程序会读取不到值?
相关文章推荐
- 一列多行值合并成一个值(MS SQL SERVER 2008)
- 一列多行值合并成一个值(MS SQL SERVER 2008)
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC DBREINDEX对指定数据库中的表重新生成一个或多个索引
- Set up JBPM5.4 Final Installer to use MS SQL Server 2008 using JTDS
- ms sql server 2008 数据库自动备份作业权限问题
- MS SQL Server 2005/2008系列文章导航
- MS SQL Server 2008发布与订阅
- 一个不错的ms sql server执行计划
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC FREEPROCCACHE
- MS SQL Server 2008数据库怎么实现数据库同步备份?
- SQLSqlserver中如何将一列数据,不重复的拼接成一个字符串
- [MS]Microsoft SQL Server 2008 R2 开发版/企业版/标准版
- 在一个机机上让 Microsoft SQL Server 2000 + 2005 + 2008 三个版本共存
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SQLPERF提供所有数据库的事务日志空间使用情况统计信息
- 图文教程mssqlserver数据库导出到另外一个数据库的方法
- Set up JBPM5.4 Final Installer to use MS SQL Server 2008 using JTDS
- MS SQL SERVER 2008 “阻止保存要求重新创建表的更改” 解决方法
- MS SQL Server 2008 简体中文正式版下载地址(附序列号)
- 安装MS SQL Server 2008 提示“性能计数器注册表配置单元一致性”失败的解决办法
- ms sql server 查询一个表的字段属性和主键