如果状态等于1,则获取产品图像

时间:2016-09-26 18:49:38

标签: sql sql-server-2008

这看起来很简单但卡住了。所以让我先分享一下表结构:

产品:

CREATE TABLE [dbo].[Products](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ProductID] [int] NULL,
[CategoryID] [int] NULL,
[ProductName] [nvarchar](100) NULL,
[Details] [nvarchar](max) NULL,
[Price] [float] NULL,
[Stock] [float] NULL
)

ProductImages:

CREATE TABLE [dbo].[ProductImages](
[ImageID] [int] IDENTITY(1,1) NOT NULL,
[ProductID] [int] NULL,
[ImageName] [nvarchar](100) NULL,
[ImageDetails] [nvarchar](max) NULL,
[Status] [int] NULL
)

ProductID是 ProductImages 表中的外键。所以我想要的是显示状态= 1的图像的所有产品( ProductImages 表中的状态列)。现在这是一个逻辑。如果我对这两个表进行INNER或LEFT JOIN,那么它将显示状态为1且具有以下查询的产品:

SELECT m.ProductID, m.CategoryID, m.ProductName, m.Details, m.Price,
m.Stock, k.ImageName, k.Status FROM Products m LEFT JOIN ProductImages k
ON k.ProductID = m.ProductID WHERE k.Status = 1 

但我的要求是所有产品默认会显示图像(没有图像)。当状态为1时,仅显示 ProductImages 表中的图像。如果Status = 0,则显示产品但没有图像文本或其他任何内容。这是我应该得到的示例输出:

image_status

注意:默认情况下,只显示状态为1的图片,不显示包含产品详细信息的图片。

2 个答案:

答案 0 :(得分:1)

我对两个输出中的状态列感到有点困惑,但是如果我理解正确的话,这是一个简单的style表达式,显示CASE"No images"字符串(表示左侧)加入未找到Status <> 1的任何图像)否则显示该列的值:

Status = 1

答案 1 :(得分:1)

您可以使用status = 1的情况,然后显示ImageName列,否则为null

$state.go()