日期:2014-05-19  浏览次数:20484 次

求sql 语句
table   A
  id         name         banji  
  1             aa             a1    
  2             bb             a1      
  3             cc             a1  
table   B
  name       ject             count
    aa           语文             80
    aa           数学             85
    bb           数学             90
    cc           语文             80
    bb           语文             82
    cc           数学             93
Tabel   C
    name       count         mingci
    aa             165             3
    bb             172             2
    cc             173             1
根据以上三个表。
我只要任意输入一个学生的name   或id
就能得到三个表中的信息
如我输入name   aa
得到
id       name       count       mingci
  1         aa             165         3

或者我输入     id   =   2
得到
id       name       count       mingci
  2         bb           170           2

请问用存储过程怎么样来实现哦?????




------解决方案--------------------
你可以创建如下的函数:
create function udf_StudentScoreName
(@name varchar(50))
RETURNS TABLE
RETURN (
SELECT a.id,a.name,b.count,c.mingci
FROM tableA a inner join tableB b on a.name = b.name
inner join tableC c on a.name = c.name
where a.name = @name
)
然后,执行:select * from udf_StudentScore( 'aa ')

或者
create function udf_StudentScoreID
(@id int)
RETURNS TABLE
RETURN (
SELECT a.id,a.name,b.count,c.mingci
FROM tableA a inner join tableB b on a.name = b.name
inner join tableC c on a.name = c.name
where a.id = @id
)
然后,执行:select * from udf_StudentScore(2)
------解决方案--------------------
create proc spser
@para nvarchar(100)
as
if (isnumeric(@para))=1 --判断参数是否为数字型数据,是返回1
select A.id,A.name,C.count,C.mingci from A inner join C
on A.name=C.name where A.id= @para
else
select A.id,A.name,C.count,C.mingci from A inner join C
on A.name=C.name where A.name= @para