如何生成这样的datatable 100分

zjjhfwh 2003-05-27 04:20:24
如何把表一
id size color num
1 1 1 34
2 1 2 35
3 1 3 56

表二

colorid colorname
1 红
2 蓝
3 黄

在dataset中成datatable表三
size 红 蓝 黄
1 34 35 56


并希望能修改dataset时 改表一数据
...全文
75 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjjhfwh 2003-05-29
  • 打赏
  • 举报
回复
up
zjjhfwh 2003-05-28
  • 打赏
  • 举报
回复
up
zjjhfwh 2003-05-28
  • 打赏
  • 举报
回复
declare @i int
declare @s varchar(300)
set @i = 1
set @s = 'select ImlId as 月份'
while exists (select * from xt_color where cast(xtColorID as int) = @i )
begin
select @s = @s + ',(case when cast(imlcolor as int) ='+ cast(@i as varchar) + ' then

imlnum else 0 end) as ' +xtColorName from xt_color where cast(xtColorID as int) = @i
set @i = @i + 1
end
set @s = @s + ' from gc_importlist order by ImlId'
exec (@s)


出错

declare @i int
declare @s varchar(300)
set @i =2
set @s = 'select ImlId as 月份'
while exists (select * from xt_color where cast(xtColorID as int) = @i )
begin
select @s = @s + ',(case when cast(imlcolor as int) ='+ cast(@i as varchar) + ' then

imlnum else 0 end) as ' +xtColorName from xt_color where cast(xtColorID as int) = @i
set @i = @i + 1
end
set @s = @s + ' from gc_importlist order by ImlId'
exec (@s)


set @i =1改成2就好了


什么原因??
luofix 2003-05-27
  • 打赏
  • 举报
回复
在数据库总建立一个view。然后操作view
xiongliang2003 2003-05-27
  • 打赏
  • 举报
回复
你那其实只与表1有关,表2 用来显示 。 只要取表1的数据,所以更新方面就应该方便些吧,

这是从MS的例子交叉表改的,不知道正确吗
SELECT size,
(CASE color WHEN 1 THEN Amount ELSE 0 END) AS 红,
(CASE color WHEN 2 THEN Amount ELSE 0 END) AS 蓝,
(CASE color WHEN 3 THEN Amount ELSE 0 END) AS 黄,

FROM xxxxxtable
GROUP BY size




OK521 2003-05-27
  • 打赏
  • 举报
回复
可以用datatable来做呀。但你写出的那两个表我看得不太懂。你说明白点,我帮你写。
feng105648 2003-05-27
  • 打赏
  • 举报
回复
SqlConnection conn = GetConn();
string strQuery =@"SELECT dbo.[size].[size], dbo.color.colorname, dbo.[size].num FROM dbo.color INNER JOIN dbo.[size] ON dbo.color.colorid = dbo.[size].color ";
SqlDataAdapter da = new SqlDataAdapter(strQuery,conn);
DataSet ds = new DataSet();
da.Fill(ds);
int i=0;
string column1 = "";
string columns = "";
string values = "";
string value1="";

foreach(DataRow dr in ds.Tables[0].Rows)
{

if(i=0)
{
column1 = dr.Table.Columns[0].ColumnName;
value1 = dr[0].ToString();
columns = dr[1].ToString();
valuse = dr[2].ToString();
}
else
{
columns = columns+","+dr[1].ToString();
valuse = values+","+dr[2].ToString();
}
i++;
}

string[] temp = columns.Split(",");
string[] tempvalue = values.Split(",");
DataTable dt = new DataTable("Test");
dt.Columns.Add(column1);
for(int j=0;j<temp.Length;j++)
{
dt.Columns.Add(temp[j].ToString());
}

DataRow dr = dt.NewRow();
dr[0] = value1;
for(int k=0;k<tempvalue.Length;k++)
{
dr[k+1] = tempvalue[k].ToString();
}

feng105648 2003-05-27
  • 打赏
  • 举报
回复
SqlConnection conn = GetConn();
string strQuery =@"SELECT dbo.[size].[size], dbo.color.colorname, dbo.[size].num FROM dbo.color INNER JOIN dbo.[size] ON dbo.color.colorid = dbo.[size].color ";
SqlDataAdapter da = new SqlDataAdapter(strQuery,conn);
DataSet ds = new DataSet();
da.Fill(ds);
int i=0;
string column1 = "";
string columns = "";
string values = "";
string value1="";

foreach(DataRow dr in ds.Tables[0].Rows)
{

if(i=0)
{
column1 = dr.Table.Columns[0].ColumnName;
value1 = dr[0].ToString();
columns = dr[1].ToString();
valuse = dr[2].ToString();
}
else
{
columns = columns+","+dr[1].ToString();
valuse = values+","+dr[2].ToString();
}
i++;
}

string[] temp = columns.Split(",");
string[] tempvalue = values.Split(",");
DataTable dt = new DataTable("Test");
dt.Columns.Add(column1);
for(int j=0;j<temp.Length;j++)
{
dt.Columns.Add(temp[j].ToString());
}

DataRow dr = dt.NewRow();
dr[0] = value1;
for(int k=0;k<dt.Columns.Count;k++)
{
dr[k+1] = tempvalue[k].ToString();
}

CMIC 2003-05-27
  • 打赏
  • 举报
回复
DataSet myDs=new DataSet();

DataTable myDt=new DataTable();
myDt.Columns.Add("size");
myDt.Columns.Add("红");
myDt.Columns.Add("蓝");
myDt.Columns.Add("黄");

SqlDataAdapter Da=new SqlDataAdapter("select tsize,colorname,num from table1,table2 where table1.id=table2.colorid",myCn);
DataTable Dt=new DataTable();
Da.Fill(Dt);

int i=0;
DataRow myDr=myDt.NewRow();
foreach(DataRow Dr in Dt.Rows)
{
i++;

if(i==1)
{
myDr["size"]=Dr["size"];
myDr["红"]=Dr["num"];
}
if(i==2)
{
myDr["蓝"]=Dr["num"];
}
if(i==3)
{
i=0;
DataRow myDr=myDt.NewRow();
myDr["黄"]=Dr["num"];
}

}

myDs.Tables.Add(myDt);
下班了急,请大家不要笑话我语法的不规则.
zjjhfwh 2003-05-27
  • 打赏
  • 举报
回复
up
zjjhfwh 2003-05-27
  • 打赏
  • 举报
回复
up
mongtze 2003-05-27
  • 打赏
  • 举报
回复
sql 语句嵌套完全可以实现。
lds88 2003-05-27
  • 打赏
  • 举报
回复
你到sqlserver版搜“交叉报表”,相信会得到满意的答案
zjjhfwh 2003-05-27
  • 打赏
  • 举报
回复
急啊!!救救我。

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧