日期:2014-05-18  浏览次数:20498 次

sqlserver group by的问题求助
刚接触sqlserver,我使用group by 的时候会提示“因为该列没有包含在聚合函数或 GROUP BY 子句中”这样的提示,
例如:
name value1 value2 value3
A A1 A2 A3
A A_1 A_2 A_3
B B1 B2 B3

我需要把name对应的值只列出一次 如果单独用group by name的话会报上面的错
网上说可以把其他的字段用max()或者min()这类的函数列出 但这样就不能保证三个值是一条记录的结果
求助该怎么做! 实在对这个数据库无奈里

------解决方案--------------------
SQL code
select b.* from
(select distinct [name] from table_name) a
cross apply
(select top(1) * from table_name where [name] = a.[name] order by value1 desc) b

------解决方案--------------------
SQL code

CREATE TABLE tb
( 
    name VARCHAR(10),
    value1 VARCHAR(10),
    value2 VARCHAR(10),
    value3 VARCHAR(10)
)
GO
INSERT INTO tb
SELECT 'A', 'A1', 'A2', 'A3' UNION 
SELECT 'A', 'A_1', 'A_2', 'A_3' UNION 
SELECT 'B', 'B1', 'B2', 'B3'


GO
SELECT *
FROM tb AS A
WHERE (SELECT COUNT(1) FROM tb WHERE A.name = name AND A.value1 > value1) < 1

------解决方案--------------------
SQL code
SELECT *
FROM TAB A
WHERE NOT EXISTS (
SELECT 1
FROM TAB
WHERE NAME = A.NAME 
AND (value1  < A.value1 
OR value1  = A.value1 
AND value12 < A.value2
OR value1 = A.value1 
AND value12 = A.value2
AND value13 < A.value3)
)

------解决方案--------------------
1:如果数据量多 先把T_User 的数据放到一张临时表里(insert into tb select * from tb_ where vcuserName like '%1%')
然后用这张表和其他表做关联

2:
join col..=col.. 
where col..
关联字段和where条件判断字段都增加索引