2013-10-19 54 views
0

我要选择SQL Server数据类型和名称,但它有列复制,这是我的SQL:鲜明的多列

with typesum 
as 
(
    select sc.xtype,sc.[length],st.name 
    from syscolumns sc,systypes st 
    where sc.xtype=st.xtype 
    group by sc.xtype,sc.[length],st.name 
) 
select distinct tsa.xtype,tsb.name,tsb.[length] 
from typesum tsa left join typesum tsb 
on tsa.xtype=tsb.xtype 

它有很多复制数据。

我用另一种方式:

select distinct (sc.xtype,st.name) from syscolumns sc 
left join systypes st 
on sc.xtype=st.xtype 
group by sc.xtype,st.name 

它不工作。

我的问题是:我怎么能明显多列由不同的一个栏目,并获得独特的数据的结果,有10列,我想作为标准不同的第1列,和其他列的数据应该被删除?

例如:

1   1 
1   1 
2   2 
2   2 

结果是:

1   1 
2   2 

也许样品SQL可以解决的是better.Thank你。

+0

什么是 '这是行不通的。'意思?最后一个查询中有错误的圆括号。 –

回答

3

你并不需要同时group bydistinct

要么

select distinct sc.xtype,st.name 
from syscolumns sc 
left join systypes st 
on sc.xtype=st.xtype 

select sc.xtype,st.name 
from syscolumns sc 
left join systypes st 
on sc.xtype=st.xtype 
group by sc.xtype,st.name 

都应该工作

+0

选择不同的sc.xtype,st.name 我应该这样理解:select distinct(sc.xtype,st.name)或者像这样:select(distinct sc.xtype),st.name – Dolphin

+1

@Dolphin'SELECT DISTINCT'适用于所有选定的值。 – podiluska

+0

当我想选择更多的列如:select sc.name,sc.xtype,st.name,st。[length] from syscolumns sc left join systypes st on sc.xtype = st.xtype group by st。名,sc.xtype,sc.name,ST [长度]。以及如何区分st.name?我希望结果st.name是唯一的,其他数据可以删除。 – Dolphin