从DataCamp

时间:2017-04-21 16:05:21

标签: sql-server tsql

我刚开始学习T-SQL,任何人都可以指出哪里错了?任何帮助将不胜感激!

问题:

AdventureWorksLT数据库包含一个名为dbo.ufnGetAllCategories的表值函数,它返回一个产品类别表(例如'Road Bikes')和父类别(例如'Bikes')。

说明:

编写一个使用此函数的查询,以返回所有产品的列表,包括其父类别和自己的类别。确保使用提供的别名和其他地方的默认列名。

我的尝试:

CREATE FUNCTION dbo.ufnGetAllCategories(@ProductCategoryID AS Integer);
RETURNS TABLE
AS

RETURN
(SELECT C.ParentProductCategoryName AS ParentCategory,
   C.ProductCategoryName AS Category,
   P.ProductID, P.Name AS ProductName
FROM SalesLT.Product AS P JOIN SalesLT.ProductCategory AS C 
ON P.ProductCategoryID = C.ProductCategoryID 
JOIN dbo.ufnGetAllCategories() AS f
ON P.ProductCategoryID = f.ProductCategoryID
ORDER BY ParentCategory, Category, ProductName);

我的输出:

提交不正确

解决方案中的列ParentCategory没有结果中具有相同名称和值的列。

1 个答案:

答案 0 :(得分:0)

我相信你在解决这一挑战方面非常接近。该函数是一个表值函数。

select *
from [dbo].[ufnGetAllCategories]()

并输出如下所示的输出。

Result from table valued function

所以你可以使用dbo.ufnGetAllCategories()作为普通表。

select C.ParentProductCategoryName as ParentCategory
     , C.ProductCategoryName as Category
     , P.ProductID
     , P.Name as ProductName
from SalesLT.Product as P
     join dbo.ufnGetAllCategories() as C on P.ProductCategoryID = C.ProductCategoryID 
     order by ParentCategory, Category, ProductName;

导致:

Overall result